6. Binary Tree

Preorder

Recursive

List<Integer> preorderTraversal(TreeNode root) {
  List<Integer> result = new ArrayList<>();
  preorder(root, result);
  return result;
}

private void preorder(TreeNode root, List<Integer> result){
    if (root == null){
        return;
    }
    result.add(root.val);
    preorder(root.left, result);
    preorder(root.right, result);
}

Divide & conquer

public List<Integer> preorderTraversal(TreeNode root) {
    List<Integer> result = new ArrayList<>();
    if (root == null){
        return result;
    }

    List<Integer> left = preorderTraversal(root.left);
    List<Integer> right = preorderTraversal(root.right);

    result.add(root.val);
    result.addAll(left);
    result.addAll(right);

    return result;
}

Iterative

Morris

  • Save space but traverse the nodes twice

  • Time O(n)

Inorder

  • Create TreeNode cur

  • 2 whiles, first put node to left bottom

Iterative

O(1) Space

Postorder

  • Create TreeNode pre & cur to compare

  • Push cur in stack

Iterative

Stack -> Queue

E.X. isBinarySearchTree

  • Create a class and put in queue

Last updated

Was this helpful?