线索二叉树
线索二叉树的基本概念
为了解决无法直接找到该结点在某种遍历序列中的前驱和后继结点的问题, 出现了线索二叉树。
一个二叉树通过如下的方法“穿起来” : 所有原本为空的右(孩子)指针改为指向该节点在某种遍历序列中的后继, 所有原本为空的左(孩子)指针改为指向该节点的某种遍历序列的前驱。
如图所示:
![![[Pasted image 20250717075609.png]]](https://i-blog.csdnimg.cn/direct/fd2f6fc5197f462690c76a1d2b7f1112.png)
节点结构
![![[Pasted image 20250717075631.png]]](https://i-blog.csdnimg.cn/direct/bf875923c69c4935b012329dd52a7e5c.png)
其中 ltag/rtag 为 0 表示 lchild/rchild 指向左/右孩子。
ltag/rtag 为 1 表示 lchild/rchild 指向前驱/后继节点。
几种线索二叉树
先序线索二叉树的特点
节点若无左子树, 则指向先序遍历序列的前驱节点;
节点若无右子树, 则指向先序遍历序列的后继节点。
![![[Pasted image 20250716170832.png]]](https://i-blog.csdnimg.cn/direct/cc29cbc585f348119e6b790b453bdb3f.png)
![![[Pasted image 20250717075934.png]]](https://i-blog.csdnimg.cn/direct/26ac590ffab24016af8bfec0a5c72f1f.png)
中序线索二叉树的特点
节点若无左子树, 则指向中序遍历序列的前驱节点;
节点若无右子树, 则指向中序遍历序列的后继节点。
![![[Pasted image 20250716171007.png]]](https://i-blog.csdnimg.cn/direct/90971dbcab9e41e2b79cb6f4cf74ed08.png)
![![[Pasted image 20250717075904.png]]](https://i-blog.csdnimg.cn/direct/950dde05d3f04bd098273dd6cc8d74ff.png)
后序线索二叉树的特点
节点若无左子树, 则指向后序遍历序列的前驱节点;
节点若无右子树, 则指向后序遍历序列的后继节点。
![![[Pasted image 20250716171029.png]]](https://i-blog.csdnimg.cn/direct/fcf549d9eb7c49478b5d24fd0b795714.png)
![![[Pasted image 20250717080022.png]]](https://i-blog.csdnimg.cn/direct/11a9e52c4b0e45a9a12e8303cd398701.png)
树与森林
树的存储结构
双亲表示法
![![[Pasted image 20250717081332.png]]](https://i-blog.csdnimg.cn/direct/33934d9088be487da5e4b5d62d8d49d6.png)
优点: 可以快速的找到结点的双亲结点
缺点: 无法快速找到某个结点的孩子结点, 需要遍历整个表。
孩子表示法
![![[Pasted image 20250717081400.png]]](https://i-blog.csdnimg.cn/direct/51caf865bde84523ac6bfd971c29a27a.png)
优点: 可以快速的找到某个结点的孩子结点
缺点: 无法快速的找到某个节点的双亲结点
孩子兄弟表示法
![![[Pasted image 20250717081549.png]]](https://i-blog.csdnimg.cn/direct/5e868ccc225e463d99553ce48f72f60c.png)
优点: 可以方便的实现树与二叉树的相互转化, 可以快速的找到某个结点的孩子。
缺点: 当前的结构下查找双亲结点较麻烦。
树、 森林、 二叉树的转化
树转二叉树
第一步
![![[Pasted image 20250717081624.png]]](https://i-blog.csdnimg.cn/direct/95a9e5b7087f4841a2834afbe3f95065.png)
第二步
![![[Pasted image 20250717081648.png]]](https://i-blog.csdnimg.cn/direct/51493c9db8d042b88dccc7ab2020d71f.png)
第三步
![![[Pasted image 20250717081706.png]]](https://i-blog.csdnimg.cn/direct/bc89b32dc4c04171872607428d5efcc8.png)
二叉树转树(根节点无右孩子)
第一步
将所有结点的右指针旋转为“横线”
![![[Pasted image 20250717081734.png]]](https://i-blog.csdnimg.cn/direct/e989b0f1ad45477388d5cf20ca0568ec.png)
第二步
![![[Pasted image 20250717081746.png]]](https://i-blog.csdnimg.cn/direct/ddc33d132c5a430794411dd04f7a78ee.png)
二叉树转森林(根节点有右孩子)
第一步
![![[Pasted image 20250717081804.png]]](https://i-blog.csdnimg.cn/direct/eb38bb5079ee4e9198bdda3c5771b2f2.png)
第二步
![![[Pasted image 20250717081815.png]]](https://i-blog.csdnimg.cn/direct/d7dd71d382b64e39a4d1820a71b71650.png)
第三步
![![[Pasted image 20250717081825.png]]](https://i-blog.csdnimg.cn/direct/fb0c4338ed1f4a94b90e35b20312ab5a.png)
树和森林的遍历
树的遍历
先序遍历: 先访问根节点, 再按先序访问根节点的每根子树
后序遍历: 先后序访问子树, 最后再访问根节点
![![[Pasted image 20250717081858.png]]](https://i-blog.csdnimg.cn/direct/6caad91d84d141a889f70f086efd888c.png)
先序遍历序列: ABEFCDGHI

最低0.47元/天 解锁文章
841

被折叠的 条评论
为什么被折叠?



