数据结构考研笔记(十一)——线索二叉树

线索二叉树的概念

线索化
若无左子树,则将左指针指向其前驱结点;
若无右子树,则将右指针指向其后继结点。
在这里插入图片描述
在这里插入图片描述

typedef struct ThreadNode {
	ElemType data;
	struct ThreadNode *lchild,*rchild;
	int ltag, rtag;
}ThreadNode,*ThreadTree;

这种结点结构构成的二叉链表作为二叉树的存储结构,称为线索链表
在这里插入图片描述
在这里插入图片描述

 前驱结点
 若左指针为线索,则其指向结点为前驱结点
 若左指针为左孩子,则其左子树的最右侧结点为前驱结点
 后驱结点
 若右指针为线索,则其指向结点为后驱结点
 若右指针为右孩子,则其右子树的最左侧结点为后驱结点

中序线索二叉树线索化

void InThread(ThreadTree &p,ThreadTree &pre) {
	if(p! == NULL){
		inrhread (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;
	
		InThread(p->rchild, pre);
	}
}
void createInThread(ThreadTree T){
	ThreadTree pre = NULL;
	if(T!=NULL)[
		InThread(T, pre);
	 pre->rchild = NULL;
	pre->rtag = l;

中序线索二叉树遍历
找最左

ThreadNode *Firstnode (ThreadNode *p){
  while(p->ltag  o)
   p= p->lchild;
  return p;

找后继

ThreadNode *Nextnode (ThreadNode *p){
  if(p->rtag == o)
    return Firstnode (p->rchild) ;
  else
    return p->rchild;

循环的后继

void Inorder (ThreadNode *T){
  for(ThreadNode *p=Firstnode(T); p!=NULL;p=Nextnode (p))//空遍历结束
  visit(p);
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sf9090

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值