算法与数据结构(c语言)——BinaryTree(三)

本文介绍了线索二叉树的概念,即将二叉树的空指针线索化以方便遍历。线索化能减少遍历时间,将非线性结构线性化。文章提供了二叉树的创建和中序线索化的实现,并展示了带头节点和不带头节点的中序遍历线索二叉树的运行结果。
摘要由CSDN通过智能技术生成

线索二叉树:

二叉树添加了直接指向节点的前驱和后继的指针的二叉树称为线索二叉树

线索化的实质其实就是将二叉链表中的空指针改为指向其前驱或后继的线索。
也就是在遍历的过程中修改空的指针(非线性结构的线性化操作)。

                                                     

                                            这是一个线索二叉树,有着指向父节点的特殊指针(图中虚线所示)

详情请自行百科 

为什么要进行线索化?

先看看二叉树线索化后的好处吧:

1.之前说过在含有n个节点的二叉链表中有n+1个空链域,勤俭节约的良好传统美德在此处体现。

2.线索化了后遍历起来时间相比之前大大减少。

。。。

遍历之后的结果不就是一个普通的单链表?除第一个和最后一个数据元素之外,其他元素只有一个前驱一个后继。

相关实现:

结构定义:

typedef char Element;

// Link为0,标识左右孩子,Thread为1标识前驱后继的线索
typedef enum {Link,Thread} PointerTag ;

// 线索二叉树节点结构定义
typedef struct CBinTNode{
    Element data;
    struct CBinTNode *lchild,*rchild;
    PointerTag LTag;
    PointerTag RTag;
}CBinTNode, *CBinTree;
// 全局变量pre用来记录节点的前驱(上一个访问过的节点)。
CBinTree pre;

二叉树的创建(先序遍历的方式):


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值