二叉树:线索二叉树

线索二叉树


要想让二叉树树像链表那样 通过前驱直接访问后继的方式生成遍历序列,必须将二叉树进行线索化。因此创造出了线索二叉树。

实现方式

如果某个结点的左孩子为空,则将空的孩子指针域改为指向其前驱;

如果某结点的右孩子为空,则将空的右孩子指针域改为指向其后继。

这种改变指向的指针称为线索。

lTag、rTag = 0 指向该结点的左/右孩子
lTag、rTag = 1 指向该结点的前驱/后继

线索二叉树存储结构
typedef struct BiThrNode {
    int data;    //数据域
    struct BiThrNode *lchild;//左子指针
    int lTag;    //左指针标志域
    struct BiThrNode *rchild;//右子指针
    int rTag;    //右指针标志域
} BiThrNode, *BiThrTree;
先序线索二叉树

在这里插入图片描述
在这里插入图片描述

先序序列:A B C D E

注意指向前驱和后继而不是孩子和父母!

中序线索二叉树

在这里插入图片描述

中序序列:B C A E D

后序线索二叉树

在这里插入图片描述

后序序列:C B E D A

增设头结点

为避免悬空,增设一个头结点,使遍历序列中第一个结点的lchild域最后一个结点的rchild域指向头结点。在这里插入图片描述

中遍历结果:H D I B E A F C G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值