二叉树中序遍历非递归实现:
利用两层循环以及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;
}