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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 二叉树的遍历(非递归) -> 正文阅读

[数据结构与算法]二叉树的遍历(非递归)

由于二叉树的递归方法实际上是系统在使用栈进行操作,因此我们的迭代(非递归)方法也就需要使用栈进行模拟。

一、先序遍历

我们需要明白,进栈的元素都是树的根节点 root。
所以我们需要先访问该节点,再将该节点进栈。
【数据结构】树的非递归先序遍历、中序遍历算法_哔哩哔哩_bilibili二叉树的非递归后序遍历算法https://www.bilibili.com/video/BV1gV411U7XJ?from=search&seid=5899376191017226924&spm_id_from=333.337.0.0
感觉这个讲的很不错,其中使用了一个口诀:
1.无脑进栈
2.遇到NULL访问栈顶(也就是再找不到更小的左儿子了)
3.访问栈顶右孩子

只要是碰到新的结点(也就是新的root)那么就无脑进栈。

我们在编程的时候,先将结点输出,然后再进栈,也就是说,只要我们进栈的顺序就是我们的先序的数列顺序,那就实现了先序遍历。

最大的结束循环的条件就是:不仅仅它的左右儿子都是NULL了,而且栈里面是空的了(也就相当于将所有的结点都遍历了一遍)。

注意细节:root = s[top--]; //在访问某个结点D的右孩子的同时,也删掉了该结点D

//先序遍历
void PreOrder()
{
    s[NUM]; //构造的栈是为了存储左儿子的,因为右儿子不用存
    top = -1;
    while(root != NULL || top != -1) //先序(中左右):当到右侧的时候,就不需要保存右侧结点
    {
        while(root != NULL)
        {
            //一直向左侧找儿子,找到最小的左儿子
            printf("%d", root->data); //由于是先序,所以先输出根
            s[++top] = root;
            root = root->lchild;
        }
        if(top != -1)
        {
            //找到右侧的兄弟
            root = s[top--]; //在访问某个结点D的右孩子的同时,也删掉了该结点D
            root = root->rchild;
        }
    }
}

二、中序遍历

与先序遍历的大体都相同,唯一不同的点是:访问的时间不同(先序是在进栈的时候访问该节点,中序是在出栈的时候访问该节点)

出栈时候访问结点即可实现左中右顺序的原因:
由于我们循环无脑进栈(未碰到 root != NULL时)的最后一个一定是最左的儿子D,我们先让他出栈,然后我们在访问D的父结点以求得到D的兄弟时,也要将D的父亲结点出栈——这就是左中右的中,理所当然,当我们最后pop的结点时,就剩下右节点去pop了。

三、后序遍历

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:04:31  更:2021-10-07 14:06:55 
 
开发: 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年11日历 -2024/11/26 6:53:26-

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