94. Binary Tree Inorder Traversal

DFS

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

List<Integer> list = new LinkedList<>();
recur(list, root);
return list;
}

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

recur(list, node.left);
list.add(node.val);
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
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
// left -> root -> right

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

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

// now: root is null
TreeNode node = stack.pop(); // 回溯
resultList.add(node.val);
if (node.right != null) {
root = node.right; // 注意此处是赋值给 root 而不是 stack.push(node.right),因为需要将 node.right 作为一颗子树进行递归
}
}

return resultList;
}
}

References

94. Binary Tree Inorder Traversal