线索二叉树(存储结构,线索化,寻找前驱/后继)

目录

  • 1.线索二叉树
    • 1.中序线索二叉树
    • 2.后序线索二叉树
    • 3.先序线索二叉树
  • 2.线索二叉树的存储结构
  • 3.二叉树的线索化
    • 1.中序线索化
    • 2.先序线索化
    • 3.后序线索化
  • 4.寻找前驱/后继
    • 1.中序线索二叉树找后继
    • 2.中序线索二叉树找中序前驱
    • 3.先序线索二叉树找先序后继
    • 4.先序线索二叉树找先序前驱
    • 5.后序线索二叉树找后序前驱
    • 6.后序线索二叉树找后序后继

1.线索二叉树

为了解决普通二叉树遍历,寻找前驱或者后继不方便的问题,引入了线索二叉树。
n个结点的二叉树,有n+1个空链域,可用来记录前驱、后继的信息。
指向前驱、后继的指针称为‘线索”

1.中序线索二叉树

中序线索二叉树――线索指向中序前驱、中序后继.
左孩子指针指向前驱线索
右孩子指针指向后继线索

在这里插入图片描述

2.后序线索二叉树

后序线索二叉树――线索指向后序前驱、后序后继。

在这里插入图片描述

3.先序线索二叉树

先序线索二叉树――线索指向先序前驱、先序后继.

在这里插入图片描述

2.线索二叉树的存储结构

在这里插入图片描述

tag == 0,表示指针指向孩子
tag == 1,表示指针是“线索

3.二叉树的线索化

1.中序线索化

在这里插入图片描述

2.先序线索化

会出现转圈问题。当ltag==0时,才能对左子树先序线索化.

在这里插入图片描述

3.后序线索化

在这里插入图片描述

4.寻找前驱/后继

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

若右指针没有被线索化,找右子树中最左下结点

在这里插入图片描述

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

若左指针没有被线索化,找左子树中最右下结点

在这里插入图片描述

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

若右指针没有被线索化:
①若结点p有左孩子,则先序后继为左孩子;
②若结点p没有左孩子,则先序后继为右孩子。

在这里插入图片描述

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

若左指针没有被线索化,先序遍历中,左右子树中的结点只可能是根的后继,不可能是前驱。

改用三叉链表可以找到父节点的情况:
如果能找到p的父节点,且p是左孩子,p的父节点即为其前驱。
如果能找到p 的父节点,且p是右孩子,其左兄弟为空,p的父节点即为其前驱。
如果能找到p的父节点,且p是右孩子,其左兄弟非空,p的前驱为左兄弟子树中最后一个被先序遍历的结点。
如果p是根节点、则p没有先序前驱

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

若左指针没有线索化的情况:
①若p有右孩子,则后序前驱为右孩子。
②若p没有右孩子,则后序前驱为左孩子。

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

若右指针没有被线索化:后序遍历中,左右子树中的结点只可能是根的前驱,不可能是后继。

改用三叉链表可以找到父结点:
如果能找到p的父节点,且p是右孩子,p的父节点即为其后继。
如果能找到p 的父节点,且p是左孩子,其右兄弟为空,p的父节点即为其后继。
如果能找到p的父节点,且p是左孩子,其右兄弟非空,p的后继为右兄弟子树中第一个被后序遍历的结点。
如果p是根节点,则p没有后序后继

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

城市内涝积水的原因有哪些?万宾科技内涝积水监测仪工作原理

一旦有暴雨预警出现多地便会立即响应,以防城市内涝问题出现。随着人口迁移,越来越多的人口涌入城市之中,为了完善城市基础设施建设,城市应急管理部门对内涝的监测越来越严格,在信息化时代,城市管理也趋向于…

docker更改存储目录原因及方案

为什么一定要将docker的存储目录挂载到其他目录 docker在安装时默认存储目录在/var/lib/docker,而该目录是在系统盘下的。docker安装后,会使用各种各样的镜像,动辄几个G,那么如此多的镜像文件,装着装着系统盘就撑爆了…

景联文科技提供高质量人像采集服务,助力3D虚拟人提升逼真度

人像采集是一种通过特定设备或技术,对人的相貌、身材等特征信息进行收集和处理的过程,可应用于3D虚拟人领域。通过采集大量的人像数据,可以训练和优化人像识别算法,提高其准确性。 人像采集对于提高3D虚拟人的逼真度、个性化定制以…

矩阵的除法

B/A 如果矩阵A可逆,那么 证明: A/AB 如果矩阵A和B都可逆,那么 证明:

Linux nohup后台启动/ 后台启动命令中nohup 、、重定向的使用

文章目录 一、前言二、nohup(不挂断)简介三、nohup使用3.1、nohup启动3.2、nohup与&,后台运行3.3、nohup与>,日志重定向3.4、nohup后台启动-综合使用(推荐)2>&1 3.5、nohup后台启动(不生成日志) 四、查看进程五、知…

Web前端—CSS高级(定位、高级技巧、CSS修饰属性、综合案例:购物网站轮播图)

版本说明 当前版本号[20231108]。 版本修改说明20231107初版20231108对知识点(圆点)进行补充 目录 文章目录 版本说明目录day08-CSS高级01-定位相对定位绝对定位定位居中固定定位堆叠层级 z-index定位总结 02-高级技巧CSS精灵案例-京东服务HTML结构CS…

git上传项目至github(Linux)

01 git版本创建 git init 创建版本库 创建一个版本 git add test1.cpp git commit -m 说明信息 git log 查看版本记录 02 版本回退 git reset --hard HEAD^ 版本回退一个 git reset --hard HEAD^^ 版本回退二个 git reset --hard 版本号 版本回退到指定版本&#xff0…

【IP固定】地平线开发板如何实现重启IP地址不变

文章目录 1 背景2 临时解决方案3 真正解决方案 1 背景 重新刷了地平线工具链OE包中BSP20230417的系统镜像,结果只能串口连接,无法实现网口连接,串口连接后,发现eth0和eth1的IP竟然是一样的,如下图所示 还挺少见的。 …

redis配置文件详解

一、配置文件位置 以配置文件启动 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf ( Windows名为redis.windows. conf) 例: # 这里要改成你自己的安装目录 cd ./redis-6.0.8 vim redis.conf redis对配置文件对大小写不敏感 二、配置文件 1、获取当前服务的…

(C++17) variant的使用与union对比

文章目录 前言与需求union内存映射图C11的union 使用ref示例构造普通构造置空emplacemonostate 访问std::get<>std::holds_alternative<>获取指针std::get_if<>获取可选数量个数std::variant_size END 前言与需求 联合体&#xff0c;是在C语言时代就存在的概…

Python BeautifulSoup 库使用教程

文章目录 简介安装 BeautifulSoup 库BeautifulSoup 库的导入BeautifulSoup 库依赖的解析库创建 BeautifulSoup 对象CSS选择器1、通过标签名查找2、通过 CSS 的类名查找3、通过 Tag(标签) 的 id 查找4、通过 是否存在某个属性来查找5、通过 某个标签是否存在某个属性来查找 获取…

【微服务专题】手写模拟SpringBoot

目录 前言阅读对象阅读导航前置知识笔记正文一、工程项目准备1.1 新建项目1.1 pom.xml1.2 业务模拟 二、模拟SpringBoot启动&#xff1a;好戏开场2.1 启动配置类2.1.1 shen-base-springboot新增2.1.2 shen-example客户端新增启动类 三、run方法的实现3.1 步骤一&#xff1a;启动…