Poison

144. Binary Tree Preorder Traversal

Recursion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
// root, left, right

List<Integer> list = new LinkedList<>();

recur(list, root);

return list;
}

private void recur(List<Integer> list, TreeNode node) {
if (node == null) {
return;
}

list.add(node.val);
recur(list, node.left);
recur(list, node.right);
}
}
Iterate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
// root, left, right

List<Integer> list = new LinkedList<>();
Stack<TreeNode> stack = new Stack<>();
if (root != null) {
stack.push(root);
}

while (!stack.isEmpty()) {
TreeNode node = stack.pop();
list.add(node.val);

// 注意放入 stack 的顺序,因为 pop 出来的顺序与 push 的顺序相反
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}

return list;
}
}
Iterate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
// root, left, right

List<Integer> numList = new ArrayList<>();

Stack<TreeNode> stack = new Stack<>();
while (!stack.isEmpty() || root != null) {
while (root != null) {
numList.add(root.val);
stack.push(root);
root = root.left;
}

// now: root is null
TreeNode node = stack.pop();
root = node.right;
}

return numList;
}
}
Reference

144. Binary Tree Preorder Traversal