Java二叉树非递归遍历

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

二叉树的创建和深度优先递归_写代码别头秃的博客-CSDN博客

非递归我们用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.循环以上步骤,直到栈空

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值