您的位置:首页 > 编程语言 > Java开发

LeetCode94 BinaryTreeInorderTraversal Java题解(递归 迭代)

2015-07-08 09:57 417 查看
题目:

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: