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?
Check code in detail below:
Key to solve: Stack
In_Order: left -> mid -> right
Push all the left subtree node into Stack, when we reach bottom of left subtree
As a result, the top element of Stack will be left most bottom node of Tree,
It is time to pop elemnt from stack and add into result list,
After left subTree -> Continue traverse right subTree, until stack is empty
public static ArrayList<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> res=new ArrayList<Integer>();
if(root==null) return res;
Stack<TreeNode> stack=new Stack<TreeNode>();
while(!stack.isEmpty() || root!=null){
//push all the left node of tree into stack first
if(root!=null){
stack.push(root);
root=root.left;
}else{
//reach the bottom of left subtree, pop out from stack
root=stack.pop();
//add into result list
res.add(root.val);
root=root.right;
}
}
return res;
}