二叉树的线索化

二叉树的线索化

笔者学习过程中,借鉴博客:https://blog.csdn.net/One_castle/article/details/102968998]

结点类型

struct BiThrNode{
	int date;
	struct BiThrNode *lchild,*rchild;
	int LTag,RTag;
}

LTag
0 lchild指示左孩子
1 lchild指示结点前驱
RTag
0 rchild指示右孩子
1 rchild指示结点后继

线索化

BiThrNode* pre = NULL;//指向上一次访问的节点
void InThreading(BiThrNode* root) {
	BiThrNode* p = root;//指向当前节点的指针
	if (p!= NULL) {
		InThreading(p->lchild);
	if (p->lchild == NULL) {//当前结点没有左孩子
			p->lThread = true;
			p->lchild = pre;//左子树指向前驱
		}
	if (pre->rchild == NULL) {//上一节点没有右孩子
			pre->rThread = true;
			pre->rchild = p;//右子树指向后继
		}
	pre = p;//pre指向上一次访问的节点
	InThreading(p->rchild);
	}
}

处理头节点

void InOrderThreading(BiThrNode* &Thrt,BiThrNode* T){
	if(!(Thrt = (BiThrNode*)malloc(sizeof(BiThrNode)));
	Thrt->LTg = false;
	Thrt->RTag = true;
	Thrt->rchild = Thrt;
	if(!T)
		Thrt->lchild = Thrt;
	else{
		Thrt->lchild = T;
		pre = Thrt;
		InThreading(T);
		pre->rchild = Thrt;//此时pre指向右子树的最右结点
		pre->RTag = true;
		Thrt->rchild = pre;
	}
	return OK;
}//关系见图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值