您的位置:首页 > 其它

leetcode--BinaryTreeInorderTraversal

2015-06-13 15:17 316 查看
二叉树中序遍历非递归实现:

利用两层循环以及stack,第一层循环代替总的递归过程,第二个循环代替先序遍历时逐层向下访问左节点。第一层循环用stack为空作为控制条件,第二层循环当前节点没有左节点就结束了。

public List<Integer> inorderTraversal(TreeNode root) {
if (root == null) return new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
List<Integer> list = new ArrayList<Integer>();
stack.push(root);
TreeNode current = root;
while (!stack.empty()) {
while (current != null) {
current = current.left;
if(current!=null)stack.push(current);
}
list.add(stack.peek().val);
if (stack.peek().right != null) {
current = stack.peek().right;
stack.pop();
stack.push(current);
}else stack.pop();
}
return list;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 前序遍历