question:
Given a binary tree, return the inorder traversal of its nodes’ values.
For example:
Given binary tree [1,null,2,3],
1
\
2
/
3
return [1,3,2].
explanation
// 先将所有的左结点入栈 然后对每个出栈的结点进行判断 若该节点有右结点 将右结点入栈 并将右结点的所有左结点自底向上入栈
solution:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<Integer>();
Stack<TreeNode> stack =new Stack<TreeNode>();
if(root==null)
return list;
while(root!=null)
{
stack.push(root);
root=root.left;
}
while(!stack.empty())
{
TreeNode node=stack.pop();
list.add(node.val);
if(node.right!=null)
{
stack.push(node.right);
node=node.right;
while(node.left!=null)
{
stack.push(node.left);
node=node.left;
}
}
}
return list;
}
a better solution
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
while(cur!=null || !stack.empty()){
while(cur!=null){
stack.add(cur);
cur = cur.left;
}
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
return list;
}