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?
inorder traversal: left child -> parent -> right child
List<Integer> list = new ArrayList<Integer>();
//recursive
public List<Integer> inorderTraversal(TreeNode root) {
if (root != null) {
inorder(root);
}
return list;
}
public void inorder(TreeNode treeNode){
if (treeNode.left !=null) {
inorder(treeNode.left);
}
list.add(treeNode.val);
if (treeNode.right != null) {
inorder(treeNode.right);
}
}
//non-recursive
public List<Integer> inorderTraversal1(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode pNode = root;
if (root ==null) {
return list;
}
while (pNode !=null || !stack.isEmpty()) {
if (pNode!=null) {
stack.push(pNode);
pNode = pNode.left;
}else{
TreeNode temp = stack.pop();
list.add(temp.val);
pNode = temp.right;
}
}
return list;
}