版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39956356/article/details/80141980
由于二叉树的(先,中,后)序线索化及遍历有一定的复杂性,所以在(一)中我先简单的介绍一下基本特征。希望你能坚持阅读完接下来的几篇文章,我相信你可以收获颇多!!!整体代码会在最后一篇文章以百度云形式给出。
一、 基本特征
线索二叉树:利用二叉树中的空指针域 来存放在某种遍历次序下的前驱和后继 ,这种指针叫“线索”(Thread)。这种加上了“线索”(Thread)的二叉树称为线索二叉树.。
1:本质对二叉树的非线性结构进行线性化操作。即可以看成队列,有唯一的前驱和后继。
2:二叉链表
3:带双亲的三叉链表(后序线索化要使用这个)
4:处理相关问题的核心思想:
递归
5:n个节点的二叉树中含有n+1个空指针域。
二、线索二叉树结构
/********************************************************
Funtion:
线索二叉树结构体(Threaded Binary Tree)
LTag:
0 : lchild 域指示结点的左孩子
1 : lchild 域指示结点的前驱
RTag:
0 : rchild 域指示结点的右孩子
1 : rchild 域指示结点的后继
注意:
由于后序线索化及遍历的特殊性,要使用带双亲的三叉链表
原因请参考数据结构C语言P133的第一段!!!
*********************************************************/
typedef enum {
Link, Thread
}PointerTag;//Link == 0 :指针, Thread == 1: 线索
typedef struct BiThrNode {
TElemType data;
struct BiThrNode *rchild, *lchild, *Parent; //左右孩子指针,(**Parent给后序线索化用的。先序,中序不考虑*Parent)
PointerTag LTag, RTag; //左右标识
}BiThrNode, *BiThrTree;
(先序,中序)线索化及遍历:
https://blog.csdn.net/weixin_39956356/article/details/80142461
后序线索化及遍历:
https://blog.csdn.net/weixin_39956356/article/details/80144113
二叉树的(先,中,后)序的建树:
https://blog.csdn.net/weixin_39956356/article/details/80141837