IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 二叉树非递归遍历基于栈和队列深度与广度遍历 -> 正文阅读

[数据结构与算法]二叉树非递归遍历基于栈和队列深度与广度遍历

在这里插入图片描述

二叉树 创建与递归遍历

前序遍历
分析

栈的特点为先进和后出

前序遍历的特点为左 根 右

所以需要先将含有左子树的根进行压栈处理 待左子树处理完弹出根节点对右子树进行压栈处理

结合树进行分析

在这里插入图片描述

编码
public static void proOrder(MyTreeNode tree){

        if(tree == null) return;

        Stack<MyTreeNode> stack = new Stack<>();

        MyTreeNode tempNode = tree;

        while (tempNode != null || !stack.empty()){
			// 循环遍历左子树的值
            while (tempNode != null){
                stack.push(tempNode);
                tempNode = tempNode.getLeftNode();
            }
            MyTreeNode pop = stack.pop();
            System.out.println(pop.getNum());
			// 判断当前根是否存在右子树
            if(pop.getRightNode() != null){
                tempNode = pop.getRightNode();
            }

        }

    }
中序遍历
分析

前序遍历的特点为 根 左 右

所以需要先将根节点进行压栈 弹出 处理后再对左右子树进行压栈处理

结合树进行分析

在这里插入图片描述

编码
    public static void inOrder(MyTreeNode tree){

        if(tree == null) return;

        Stack<MyTreeNode> stack = new Stack<>();
        stack.push(tree); // 根节点可以先压栈 进入循环体内就可以开始弹出元素

        while (!stack.empty()){
            MyTreeNode pop = stack.pop();
            System.out.println(pop.getNum());

            if(pop.getRightNode() != null){
                stack.push(pop.getRightNode());
            }

            if(pop.getLeftNode() != null){
                stack.push(pop.getLeftNode());
            }
        }

    }
后序遍历
分析

后序遍历的特点为 左 右 根

所以需要先将左节点压栈处理 然后是 右节点 最后是根

结合树进行分析

在这里插入图片描述

广度遍历、层级遍历
分析

广度遍历基于队列一级一级往下迭代遍历 遵循队列先进先出的特点

在这里插入图片描述

编码
  public static void testQueue(MyTreeNode tree) {
        if (tree == null) return;
        LinkedList<MyTreeNode> queue = new LinkedList<>();


        queue.offer(tree);
        while (!queue.isEmpty()) {

            MyTreeNode pop = queue.pop();
            System.out.println(pop.getNum());

            if(pop.getLeftNode()!=null){
                queue.offer(pop.getLeftNode());
            }

            if(pop.getRightNode()!=null){
                queue.offer(pop.getRightNode());
            }


        }
    }

https://blog.csdn.net/haoren1994/article/details/119277300

至此 :二叉树的几种遍历已经全部完毕

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 11:02:29  更:2021-08-02 11:03:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/11 0:05:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码