NO.7数据结构树|线索二叉树|树森林二叉树转化|树森林遍历|并查集|二叉排序树|平衡二叉树|哈夫曼树|哈夫曼编码

线索二叉树

线索二叉树的基本概念

为了解决无法直接找到该结点在某种遍历序列中的前驱和后继结点的问题, 出现了线索二叉树。
一个二叉树通过如下的方法“穿起来” : 所有原本为空的右(孩子)指针改为指向该节点在某种遍历序列中的后继, 所有原本为空的左(孩子)指针改为指向该节点的某种遍历序列的前驱。
如图所示:
![[Pasted image 20250717075609.png]]

节点结构

![[Pasted image 20250717075631.png]]

其中 ltag/rtag 为 0 表示 lchild/rchild 指向左/右孩子。
ltag/rtag 为 1 表示 lchild/rchild 指向前驱/后继节点。

几种线索二叉树

先序线索二叉树的特点
节点若无左子树, 则指向先序遍历序列的前驱节点;
节点若无右子树, 则指向先序遍历序列的后继节点。
![[Pasted image 20250716170832.png]]

![[Pasted image 20250717075934.png]]

中序线索二叉树的特点
节点若无左子树, 则指向中序遍历序列的前驱节点;
节点若无右子树, 则指向中序遍历序列的后继节点。
![[Pasted image 20250716171007.png]]

![[Pasted image 20250717075904.png]]

后序线索二叉树的特点
节点若无左子树, 则指向后序遍历序列的前驱节点;
节点若无右子树, 则指向后序遍历序列的后继节点。
![[Pasted image 20250716171029.png]]

![[Pasted image 20250717080022.png]]

树与森林

树的存储结构

双亲表示法
![[Pasted image 20250717081332.png]]

优点: 可以快速的找到结点的双亲结点
缺点: 无法快速找到某个结点的孩子结点, 需要遍历整个表。

孩子表示法
![[Pasted image 20250717081400.png]]

优点: 可以快速的找到某个结点的孩子结点
缺点: 无法快速的找到某个节点的双亲结点

孩子兄弟表示法
![[Pasted image 20250717081549.png]]

优点: 可以方便的实现树与二叉树的相互转化, 可以快速的找到某个结点的孩子。
缺点: 当前的结构下查找双亲结点较麻烦。

树、 森林、 二叉树的转化

树转二叉树

第一步
![[Pasted image 20250717081624.png]]

第二步
![[Pasted image 20250717081648.png]]

第三步
![[Pasted image 20250717081706.png]]

二叉树转树(根节点无右孩子)

第一步
将所有结点的右指针旋转为“横线”
![[Pasted image 20250717081734.png]]

第二步
![[Pasted image 20250717081746.png]]

二叉树转森林(根节点有右孩子)

第一步
![[Pasted image 20250717081804.png]]

第二步
![[Pasted image 20250717081815.png]]

第三步
![[Pasted image 20250717081825.png]]

树和森林的遍历

树的遍历

先序遍历: 先访问根节点, 再按先序访问根节点的每根子树
后序遍历: 先后序访问子树, 最后再访问根节点
![[Pasted image 20250717081858.png]]

先序遍历序列: ABEFCDGHI

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值