Similar Problem:
Given the root of a binary tree, return the preorder traversal of its nodes' values.
Input: root = [1,null,2,3]
Output: [1,2,3]
Recursive:
- Node -> Left -> Right
Iterative:
DFS preorder
Stack
- add the root val to list
- push right node first
- push left node
Time: O(n)
Space: O(n)
Iterative
public List<Integer> preorderTraversal(TreeNode root) {
if (root == null)
return new ArrayList<>();
List<Integer> ans = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
stack.add(root);
while (!stack.isEmpty()) {
root = stack.pop();
ans.add(root.val);
if (root.right != null)
stack.push(root.right);
if (root.left != null)
stack.push(root.left);
}
return ans;
}Recursive
List<Integer> ans = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
preorder(root);
return ans;
}
private void preorder(TreeNode root) {
if (root == null)
return;
ans.add(root.val);
preorder(root.left);
preorder(root.right);
}