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?