题目:
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]
.
中序遍历一颗二叉树,如果是递归就很简单了,中序遍历左+访问根节点+中序遍历右 就可以了。迭代的话,我是通过一个栈,从根节点开始入栈,只要一直存在左节点就一直入栈,不存在左节点就出栈访问节点值,然后继续遍历出栈那个节点的右节点。
代码:
1,递归
public static List<Integer> result=new ArrayList<>();
public static List<Integer> inorderTraversal(TreeNode root,List<Integer> result) {
if(root!=null)
{
inorderTraversal(root.left,result);
result.add(root.val);
inorderTraversal(root.right,result);
}
return result;
}
2,迭代(下面两个函数都是 只是不同的写法而已)
public static List<Integer> inorderTraversal2(TreeNode root,List<Integer> result) {
List<Integer> res=new ArrayList<>();
Stack<TreeNode> nodeStack=new Stack<>();
while(root!=null||!nodeStack.isEmpty())
{
while(root!=null)
{
nodeStack.push(root);
root=root.left;
}
TreeNode tempNode=nodeStack.pop();
res.add(tempNode.val);
root=tempNode.right;
}
return res;
}
public static List<Integer> inorderTraversal3(TreeNode root,List<Integer> result) {
List<Integer> res=new ArrayList<>();
Stack<TreeNode> nodeStack=new Stack<>();
while(true)
{
while(root!=null)
{
nodeStack.add(root);
root=root.left;
}
if(nodeStack.isEmpty()) break;
TreeNode tempNode=nodeStack.pop();
res.add(tempNode.val);
root=tempNode.right;
}
return res;
}