Binary Trees

Terminology

Learn all these terms:

The Wonder and Joy of Binary Trees

  1. \(\lfloor \log_2 h \rfloor\)
  2. \(2h + 1\)
  3. \(2^{h+1} - 1\)
  4. \((2h^3 + 3n^2 + n) / 6\)
  5. \(h!\)

The Wonder and Joy of Binary Trees

Exercise #2

  1. \(\lceil \log_2 n \rceil\)
  2. \(\lfloor \log_2 n \rfloor\)
  3. \(\lfloor \frac{n}{2} \rfloor\)
  4. \(n\)
  5. \(2^n\)

Exercise #2

Take Home Message

In-Order Traversal

public class Tree {

  public void printInOrder() {
    printInOrder(root);
  }

  private void printInOrder(Node node) {

    if (node != null) {
      printInOrder(node.getLeft());
      System.out.println(node.getItem());
      printInOrder(node.getRight());
    }

  }
}

In-Order Traversal (OO Version)

public class Node {

  public void printInOrder() {
    if (left != null) {
      left.printInOrder();
    }

    System.out.println(item);

    if (right != null) {
      right.printInOrder();
    }
  }

}

Pre-Order Traversal

  private void printPreOrder(Node node) {

    if (node != null) {
      System.out.println(node.getItem());
      printPreOrder(node.getLeft());
      printPreOrder(node.getRight());
    }

  }

Post-Order Traversal

   private void printPostOrder(Node node) {

    if (node != null) {
      printPostOrder(node.getLeft());
      printPostOrder(node.getRight());
      System.out.println(node.getItem());
    }

  }

Another Traversal

Trace the following traversal method…

  public void printMysteryOrder() {
    Queue<Node> queue = new LinkedList<>();
    
    queue.offer(root);  // enqueue
    
    while (!queue.isEmpty()) {
      Node curNode = queue.poll();  // dequeue
      System.out.println(curNode.getItem());
      
      if (curNode.getLeft() != null) {
        queue.offer(curNode.getLeft());
      }
      if (curNode.getRight() != null) {
        queue.offer(curNode.getRight());
      }
      
    }
    
  }