Input: [1,null,2,3]
1
\
2
/
3
Output: [1,3,2]
//Recursive solution
class Solution {
public void helper(TreeNode root, List<Integer> ans) {
if (root == null)
return;
helper(root.left, ans);
ans.add(root.val);
helper(root.right, ans);
}
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
helper(root, ans);
return ans;
}
}
//Iterative solution
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
Deque<TreeNode> stack = new LinkedList<>();
TreeNode p = root;
while (!stack.isEmpty() || p != null) {
if (p != null) {
stack.push(p);
p = p.left;
} else {
TreeNode node = stack.pop();
result.add(node.val); // Add after all left children
p = node.right;
}
}
return result;
}
}