栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 遍历二叉树使用循环方式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 遍历二叉树使用循环方式

先序遍历 实现过程

根据先序遍历的顺序,先访问根节点,再访问左子树,后访问右子树,而对于每个子树来说,又按照同样的访问顺序进行遍历。非递归的实现思路如下:

对于任一节点P,

1)输出节点P,然后将其入栈,再看P的左孩子是否为空;

2)若P的左孩子不为空,则置P的左孩子为当前节点,重复1)的操作;

3)若P的左孩子为空,则将栈顶节点出栈,但不输出,并将出栈节点的右孩子置为当前节点,看其是否为空;

4)若不为空,则循环至1)操作;

5)如果为空,则继续出栈,并将出栈节点的右孩子置为当前节点,看其是否为空,重复4)和5)操作;

6)直到当前节点P为null并且栈空,遍历结束。

代码
    //前序遍历非递归的方式
    public static void preOrderNonRecursive(BinaryTreeNode root) {
        Stack stack = new Stack<>();

        // 当root不为null或者栈不为空那么一直循环
        // 直到当前节点root为null且栈空时,循环结束
        while (root != null || !stack.isEmpty()) {
            //从根节点开始,输出当前节点,并将其入栈,
            //同时置其左孩子为当前节点,直至其没有左孩子,即当前节点为null
            System.out.print(root.value + "t");
            stack.push(root);
            root = root.left;

            //如果当前节点root为null且栈不空,则将栈顶节点出栈,
            //同时置其右孩子为当前节点,循环判断,直至root不为空
            while(root == null && !stack.isEmpty()) {
                root = stack.pop();
                root = root.right;
            }

        }
    }

来自:
二叉树的递归遍历和循环遍历_JabamiYu的博客-CSDN博客_二叉树递归遍历

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号