线索二叉树

定义

线索二叉树是一种物理结构,是表示前驱与后继位置关系的结构

示例

实现

先序线索化

过程

代码整合

//线索二叉树的类型定义
typedef struct node{
	int data;//数据域 
	int ltag,rtag;//标志域:0-表示指向孩子,1-表示指向前驱或后继 
	struct node *lchild,*rchild;//指针域 
}bithrnode,*bithrtree; 
//bithrtree bt;

//中序线索化:左根右 
1.判断树非空
2.不断递归中序遍历左子树,指针域为空线索化结点(改指前驱,标志置1) 
3.前驱非空且指针域为空线索化前驱(改指后继,标志置1)
4.记录前驱,不断线索化右子树
void inthread(bithrtree b){
	bithrnode *p=b,*pre;
	if(p!=NULL){
		inthread(p->lchild);
		if(p->lchild==NULL){
			p->lchild=pre;
			p->ltag=1;
		}
		if(pre!=NULL&&pre->rchild==NULL){
			pre->rchild=p;
			pre->rtag=1;
		}
		pre=p;//记录
		inthread(p->rchild); 
	} 
}
//找中序线索二叉树的首结点:即找树中最左边的孩子
1.空树,返回0 
2.当标志为左孩子时,不断遍历左孩子
3.返回结点 
bithrnode * first(bithrtree b){
	bithrnode *p=b;
	if(p==NULL) return 0;
	while(p->ltag==0) p=p->lchild;
	return p;
}
//找中序线索二叉树的直接后继:右标志位为1的右指针,或右子树中的最左边结点(左根右(左根右)) 
1.右标志位为1时,记录右指针
2.右标志位为0时,找最左边结点
3.返回结点
bithrnode * next(bithrtree b){
	bithrnode *p=b,*q;
	if(p->rchild==1) q=p->rchild;
	else{
		for(p=p->rchild;p->ltag==0;p=p->lchild)
		q=p;
		return q; 
	}
} 
//遍历中序线索二叉树
1.树非空:访问第一个结点
2.访问下一个结点
void threadin(bithrtree b){
	bithrnode *p;
	p=first(b);
	while(p!=NULL){
		cout<<p->data<<endl;
		p=next(p);
	}
} 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建线索二叉树是一种对二叉树进行优化的数据结构。它的目的是为了加快二叉树的遍历速度。在传统的二叉树中,为了实现对二叉树的遍历,需要使用递归或者栈来实现。而线索二叉树通过添加线索,将二叉树的节点之间的遍历顺序进行编码,从而实现快速遍历。 在线索二叉树中,每个节点都有两个指针:左指针和右指针。在一棵二叉树中,如果一个节点没有左孩子,则将其左指针指向该节点的前驱节点。如果一个节点没有右孩子,则将其右指针指向该节点的后继节点。通过这样的线索指针,可以快速地找到一个节点的前驱和后继节点,进而实现对二叉树的快速遍历。 具体来说,在线索二叉树中,如果一个节点没有左孩子,则将其左指针指向其前驱节点;如果一个节点没有右孩子,则将其右指针指向其后继节点。通过这样的线索化过程,原本需要递归或者栈来实现的遍历过程,可以直接通过线索指针快速找到下一个需要遍历的节点,从而提高了遍历的效率。 总的来说,线索二叉树是一种优化的二叉树结构,通过添加线索指针,将二叉树的节点之间的遍历顺序进行编码,从而实现了对二叉树的快速遍历。它的设计思想主要是通过设置节点的线索指针指向前驱和后继节点,提高了遍历效率,减少了递归或栈的使用。这是一个在实际应用中常用的数据结构,可以广泛应用于二叉树遍历的场景中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值