Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,3,2]
.
Note: Recursive solution is trivial, could you do it iteratively?
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
// recursive solution
public static ArrayList<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if (root == null) return list;
inorderTraversalHelper(root, list);
return list;
}
private static void inorderTraversalHelper(TreeNode root, ArrayList<Integer> list) {
if (root == null) return;
inorderTraversalHelper(root.left, list);
list.add((int) root.val);
inorderTraversalHelper(root.right, list);
}
// iterator solution
public static ArrayList<Integer> inorderTraversal2(TreeNode root){
ArrayList<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
while(true){
while(root!=null){
stack.push(root);
root = root.left;
}
if(stack.isEmpty()) break;
root = stack.pop();
list.add((int)root.val);
root = root.right;
}
return list;
}