数据结构--线索二叉树找前驱后继

news2024/11/16 9:26:59

数据结构–线索二叉树找前驱后继

中序线索二叉树找中序后继

在中序线索二叉树中找到指定结点*p的 中序后继 \color{red}中序后继 中序后继next
①若p->rtag == 1,则next = p->rchild
②若p->rtag== 0

中序遍历――左根右
左根(左根右)
左根((左根右)根右)
next = p的右子树中最左下结点

typedef struct ThreadNode
{
    ElemType data;
    struct ThreadNode *lchild, *rchild;
    int ltag, rtag; //左、右线索标志
}ThreadNode, *ThreadTree; 

//找到以P为根的子树中,第一个被中序遍历的结点
ThreadNode *Firstnode(ThreadNode *p)
{
    //循环找到最左下结点(不一定是叶结点)
    while (p->ltag == 0)   
        p = p->lchild;
    return p;
}
//在中序线索二叉树中找到结点p的后继结点
ThreadNode *Nextnode(ThreadNode *p)
{
    //右子树中最左下结点
    if (p->rtag == 0)   return Firstnode(p->rchild);
    else    return p->rchild;
}
//对中序线索二叉树进行中序遍历(利用线索实现的非递归算法)
void Inorder(ThreadNode *T)
{
    for (ThreadNode *p = Firstnode(T); p != NULL; p = Nextnode(p))
        visit(p);
}

中序线索二叉树找中序前驱

//找到以P为根的子树中,最后一个被中序遍历的结点
ThreadNode *Lastnode(ThreadNode *p)
{
    while (p->rtag == 0) p = p->rchild;
    return p;
}
//在中序线索二叉树中找到结点p的前驱结点
ThreadNode *Prenode(ThreadNode *p)
{
    //左子树中最右下结点
    if (p->ltag == 0)   return Lastnode(p->lchild);
    else    return p->lchild;
}
//对中序线索二叉树进行逆向中序遍历
void RevInorder(ThreadNode *T)
{
    for (ThreadNode *p = Lastnode(T); p != NULL; p = Prenode(p))
        visit(p);
}

在中序线索二叉树中找到指定结点*p的 中序前驱 \color{red}中序前驱 中序前驱pre
①若p->ltag == 1,则pre = p->lchild
②若p->ltag == 0

中序遍历―—左根右
(左根右)根右
(左根(左根右))根右
pre =p的左子树中最右下结点

先序线索二叉树找先序后继

先序遍历序列:A B D G E C F

在先序线索二叉树中找到指定结点*p的先序后继next
①若p->rtag == 1,则next = p->rchild
②若p->rtag == 0

先序线索二叉树找先序前驱

在先序线索二叉树中找到指定结点*p的先序前驱pre
①若p->ltag == 1,则next = p->lchild
②若p->ltag == 0

除非用土办法从头开始先序遍历
先序遍历中,左右子树中的结点只可能是根的后继,不可能是前驱

改用三叉链表可以找到父节点 \color{green}改用三叉链表可以找到父节点 改用三叉链表可以找到父节点

后序线索二叉树找后序前驱

后序遍历序列:G D E B F C A

在后序线索二叉树中找到指定结点*p的后序前驱pre
①若p->ltag == 1,则 pre = p->lchild
②若p->ltag == 0

后序线索二叉树找后序后继

在后序线索二叉树中找到指定结点*p的后序后继next
①若p->rtag == 1,则next = p->rchild
②若p->rtag == 0

除非用土办法从头开始先序遍历

后序遍历中,左右子树中的结点只可能是根的前驱,不可能是后继

改用三叉链表可以找到父节点 \color{green}改用三叉链表可以找到父节点 改用三叉链表可以找到父节点

知识点回顾与重要考点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PVT、OCV、工艺偏差、CPPRCRPR、ld漏级电流计算

文章目录 PVT&OCV(local variation)Sources of variation1) Etching2) Oxide Thickness propagation delay、ld、drain currentCPPR&CRPRsetup checkHold check 芯片的delay由两部分影响因素构成 cell delay:library set pvt_cornernet delay: rc tech fil…

电风扇自动温控调速器电路设计

这是一个电风扇自动温控调速器,可根据温度变化情况自动调节电风扇的转速,电路加以调整,也可用于其它电气设备的控制。 一、电路工作原理 电路原理如图 37 所示。 图中 IC 是 555 时基电路,与R2、R3 和 C2 等元件构成多谐振荡器…

前端Vue自定义暂无数据组件nodata 用于页面请求无数据时展示

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单…

【Cesium 安装+Cesium 加载b3dm】

Cesium 安装 一、安装的方式大致有三种: 1、引入ceisum源码包使用; 2、安装cesium插件; 3、安装Vue-cesium插件 我这里只尝试了第一种和第二种。 引入ceisum源码包使用 可以使用直接下载官方压缩包来引入也可以npm i cesium包,把…

Socket error Event: 32 Error: 10053.

Socket error Event: 32 Error: 10053. 一、报错 :二、问题:三、原因:四、解决方案: 一、报错 : Socket error Event: 32 Error: 10053. 二、问题: xshell连接虚拟机断连 三、原因: 虚拟机…

密码学学习笔记(八):Public-Key Encryption - 公钥加密1

简介 公钥加密也被称为非对称加密。下面是一个例子: Bob生成一个密钥对,发布他的公钥𝑃𝐾𝐵, 保管密钥𝑆𝐾𝐵 私有的Alice使用𝑃𝐾𝐵 加密明文M…

哪个牌子的骨传导蓝牙耳机好?精选当下五款最热门的骨传导耳机

在目前的耳机市场上,大部分耳机的传声原理还是通过空气传声,因为这种传声方式较为符合大家的听觉习惯,但是由于耳机和鼓膜距离太近,如果长时间使用会对鼓膜造成不可逆转的损伤,但骨传导原理的耳机就不会出现这种情况&a…

常用数据分类算法总结记录

本文的主要目的是总结记录日常学习工作中常用到的一些数据分类算法,对其原理简单总结记录,同时分析对应的优缺点,以后需要的时候可以直接翻看,避免每次都要查询浪费时间,欢迎补充。 机器学习领域中常用的分类模型包括以…

【用户调研】用户体验地图:寻找产品突破口

文章目录 什么是用户体验地图为什么需要用户体验地图制作步骤用户体验地图与其他“地图”关系总结 什么是用户体验地图 为什么需要用户体验地图 制作步骤 用户体验地图与其他“地图”关系 总结

前端面试题-HTML、HTTP、web综合问题(三)

26 你做的⻚⾯在哪些流览器测试过?这些浏览器的内核分别是什么? IE : trident 内核Firefox : gecko 内核Safari : webkit 内核Opera :以前是 presto 内核, Opera 现已改⽤Google - Chrome 的 Blink 内核Chrome:Blink (基于 webkit &#xf…

照片模糊怎么变清晰?秒变高清图,三个方法分享给你!

对于摄影爱好者和日常使用照片的人来说,需要高清晰度的图片是很常见的需求。在编写文档、制作展示或者从网络获取图片时,我们经常会遇到模糊的照片,这些照片既不能满足我们的需求,也无法直接使用。那么,如何将模糊的照…

OpenCV图像的仿射变换、旋转和缩放

以下是对代码的逐行解释: // 包含必要的OpenCV头文件和C++库文件 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace cv;

大数据/AI 行业案例资源介绍分享

大数据行业案例库是泰迪科技在数据挖掘领域探索10余年和高校资深讲师联合经验总结之作&#xff0c;内容涵盖智能电网、移动电信、医疗健康、网络舆情、电子商务、金融保险、交通运输、信息安全、政务民生等诸多行业&#xff0c;特别适合有数据挖掘相关课程教学的高校、研究所和…

【动态规划算法】第七题: 剑指Offer47.礼物的最⼤价值

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法\&#x1f384; 如 果 你…

《世界上最伟大的推销员》 - 经典语录与 AIGC解析

文章大纲 第一卷 全新的我第二卷 爱在今天第三卷 坚持到底第四卷 我是奇迹第五卷 最后一天第六卷 控制情绪第七卷 笑遍世界第八卷 提升价值第九卷 立即行动第十卷 我的祈祷 第一卷 全新的我 经典语录 ★ 世界上没有绝望的处境&#xff0c;只有对处境绝望的人。 ★ 怕苦的人苦一…

Redis 从入门到精通【进阶篇】之Redis事务详解

文章目录 0.前言1.Redis 事务基本流程 1.事务详解1.1. 开始事务1.2. 命令入队1.3. 执行事务1.6. 带 WATCH 的事务1.7. WATCH 命令的实现1.8. WATCH 的触发1.9. 事务的 ACID 性质 2.总结2.1. 在事务和非事务状态下2.2. 小结2.3. 为什么Redis 的事务并不是真正的原子操作2.4. 为什…

TCP连接管理(三次握手,四次挥手)

目录 一、回顾一下TCP包头二、连接的建立——“三次握手”三、连接的建立——“四次挥手”保活计时器 一、回顾一下TCP包头 源端口号&#xff08;Source Port&#xff09;&#xff1a;16 位字段&#xff0c;表示发送方的端口号。 目的端口号&#xff08;Destination Port&…

【机器学习核心总结】什么是决策树

什么是决策树 在游戏中遇到敌人是选择攻击还是逃跑&#xff1f;如果选择攻击&#xff0c;是选择普通的物理攻击还是魔法攻击&#xff1f;为达到目标根据一定的条件进行选择的过程&#xff0c;就是决策树(DT Tree)。 决策树模型非常经典&#xff0c;在机器学习中常被用于分类&…

2.3 Web应用 -- 5. Web缓存/代理服务器技术

2.3 Web应用 -- 5. Web缓存/代理服务器技术 Web缓存/代理服务器技术条件性GET方法 Web缓存/代理服务器技术 功能 在不访问服务器的前提下满足客户端的HTTP请求。 为什么要发明这种技术&#xff1f; 缩短客户请求的响应时间减少机构/组织的流量在大范围内(Internet)实现有效的内…

【小沐学C++】libcurl实现HTTP/HTTPS请求

文章目录 1、简介2、下载和编译2.1 下载2.2 编译2.3 使用 3、命令行测试3.1 获取文件头Headers3.2 请求内容Request Content3.3 响应内容Response Content3.4 GET请求3.5 POST请求3.6 其他 4、代码测试3.1 simple.c3.2 url2file.c3.3 simplepost.c3.4 resolve.c3.5 progressfun…