数据结构核心代码 day10

本文介绍了线索二叉树的概念,包括节点定义和操作方法。线索二叉树是一种增强型的二叉树结构,通过增加线索标志来辅助遍历。在中序遍历的基础上,提供了构造中序线索二叉树的递归算法。具体步骤包括对每个节点的左、右子树进行线索化,并处理最后一个节点的线索。这种数据结构优化了二叉树的查找效率,尤其在链式存储中。

5.2 线索二叉树

线索二叉树节点定义
typedef struct ThreadNode { //线索二叉树定义
ElemType data; //数据元素
struct ThreadNode *lchild, *rchild; //左、右孩子指针
int ltag, rtag; //左、右线索标志
} ThreadNode, *ThreadTree;

线索二叉树的操作
线索二叉树的构造
void InTread(ThreadTree &p,ThreadTree &pre) {
//中序遍历对二叉树线索化的递归算法
if (p!=NULL) {
InTread(p->lchild, pre); //递归,线索化左子树
if (p->lchild == NULL) { //左子树为空建立前驱线索
p->lchild = pre;
p->ltag = 1;
}
if (pre!=NULL && pre->rchild == NULL) {
pre->rchild = p; //建立前驱结点的后继线索
pre->rtag = 1;
}
pre = p; //标记当前结点成为刚刚访问过的结点
InTread(p->rchild, pre); //递归,线索化右子树
}//if{p!=NULL}
}

通过中序遍历建立中序线索二叉树线的主过程算法
void CreateInThread(ThreadTree T) {
//中序遍历建立中序线索二叉树
ThreadTree pre = NULL;
if (T!=NULL) { //非空二叉树,线索化
InTread(T, pre); //线索化二叉树
pre->rchild = NULL; //处理遍历的最后一个结点
pre->rtag = 1;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值