线索二叉树
来源:互联网 发布:龙珠gt战斗力官方数据 编辑:程序博客网 时间:2024/05/16 14:49
二叉树遍历,这实质上是对一个非线性结构进行线性化操作,使每个结点(除第一个和最后一个外)在这些线性序列中有且仅有一个直接前驱和直接后继。
遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列,得到二叉树中结点的先序序列、中序序列或后续序列。
当以二叉链表作为存储结构时,只能找到结点的左右孩子信息,而不能直接得到结点在任一序列中的前驱和后继信息,这种信息只有在遍历的动态过程中才能得到。
如何保存这种在遍历过程中得到的信息呢?
一个最简单的方法是在每个节点上增加两个指针域,分别指示结点在遍历时得到的前驱和后继信息。显然,这样做使得结构的存储密度大大降低。
另一方面,存在有n个结点的二叉链表中必定存在n+1个空链域。
为什么会有n+1个空链域呢?
如果结点总数为n, n2为度为2的结点树,n1为度为1的结点数,n0为度为0的结点数。n=n0+n1+n2 且 遵循一个公式 n0=n2+1
假设空链域的个数为 x , 以二叉链表的数据结构来说:
x = 2*n0 + 1*n1 即 叶子结点有左右两个空域,度为1的结点有左或者右域,度为2的结点没有多余的域!
x= n0+n1+n0 = n0 + n1 + n2 +1 = n + 1 故有 n+1个空链域
由此设想能否利用这些空链域来存放结点的前驱和后继的信息。把这种指向前驱和后继的指针称为线索,加上线索的二叉链表成为线索链表,相应的二叉树就称为线索二叉树(Threaded Binary Tree)
线索二叉树的数据结构为:增加了两个标志域 leftThread和rightThread
leftChild leftThread data rightThread rightChild
若leftThread=0,则leftChild为左子女指针,否则为前驱线索,同理rightThread
- 线索二叉树 --->树
- 线索二叉树算法
- C#线索二叉树
- 线索二叉树
- C#线索二叉树
- 线索二叉树
- 线索二叉树
- 线索化二叉树
- 线索二叉树
- C#线索二叉树
- C#线索二叉树
- 线索二叉树
- 线索二叉树实例
- 线索二叉树
- 线索二叉树算法
- C++线索二叉树
- 线索二叉树
- 线索二叉树实现
- python中正则表达式
- 利润表和资产负债表开发小结
- makefile笔记
- Implicit Conversions warning
- 报错:ImportError: No module named 'requests'
- 线索二叉树
- linux之汉字库HZK16
- PlatformDB数据库里几个重要的表
- OpenCV进阶之路:神经网络识别车牌字符
- 【EMGU】读取视频AVI文件+保存任意帧为图片
- sp_pv_channel_portfolio_manager_dtl
- Linux Python 多版本管理
- POJ - 1325 Machine Schedule 二分图 最小点覆盖
- [Leetcode]Median of two sorted array