二叉树的(先,中,后)序建树,线索化及遍历(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/weixin_39956356/article/details/80141980