Java二叉树非递归遍历

这里我们用栈的方法遍历树,如果想看递归,和创建树的,见这个博文

非递归我们用stack栈的原则,为先进后出

public static void preOrderTraveralWithStack(TreeNode root){
            Stack<TreeNode> stack = new Stack<TreeNode>();
            TreeNode treeNode = root;
            while(treeNode!=null || !stack.isEmpty()){
                //迭代访问节点的左孩子,并入栈
                while (treeNode != null){
                    System.out.println(treeNode.data);
                    stack.push(treeNode);
                    treeNode = treeNode.leftChild;
                }
                //如果节点没有左孩子,则弹出栈顶节点,访问节点右孩子
                if(!stack.isEmpty()){
                    treeNode = stack.pop();
                    treeNode = treeNode.rightChild;
                }
            }
        }

我们先向左搜索,往栈里存放,一旦检测到空,则弹出栈顶节点,访问右节点,用右节点替换栈顶节点,一点点遍历,直到栈为空为止。

看图理解一下:

1.首先将节点一放入栈中

2.遍历左节点,放栈中

3,遍历完左边,开始弹出4,用5将2代替。

4.循环以上步骤,直到栈空

经验分享 程序员 微信小程序 职场和发展