【数据结构】穿线二叉树

“ Ctrl AC!一起 AC!”

定义:

 

存储结构:

typedef char datatype;
typedef struct node{
	datatype data;
	int ltag,rtag;
	struct node *lchild,*rchild;
}binthrnode;
typedef binthrnode* binthrtree; 

创建中序穿线二叉树:

先建立一颗一般的二叉树,然后对其进行中序线索化。

binthrtree pre=NULL;
binthrtree createbintree(){
	char ch;
	binthrtree t;
	if((ch=getchar())=='#') t=NULL;
	else{
		t=(binthrnode*)malloc(sizeof(binthrnode));
		t->data=ch;
		t->lchild=createbintree();
		t->rchild=createbintree();
	}
	return t;
}
void inthreading(binthrtree *p){
	if(*p){
		inthreading(&((*p)->lchild));
		(*p)->ltag=(*p)->lchild?0:1;
		(*p)->rtag=(*p)->rchild?0:1; 
		if(pre){
			if(pre->rtag==1) pre->rchild=*p;
			if(*p->ltag==1) *p->lchild=pre;
		}
		pre=*p;
		inthreading(&((*p)->rchild));
	}
}
void createthrtree(binthrtree *p){
	*p=createbintree();
	inthreading(p);
}
int main(){
	binthrtree root;
	createthrtree(&root);
}

中序遍历中序穿线二叉树:

binthrtree nextnode(binthrtree p){
	binthrtree q;
	if(p->rtag==1) return p->rchild;
	else{
		q=p->rchild;
		while(q->ltag==0) q=q->lchild;
		return q;
	}
}
void inthrtree(binthrtree p){
	if(p){
		while(p->ltag==0) p=p->child;
		do{
			printf("%c ",p->data);
			p=nextnode(p);
		}while(p);
	}
}

感谢阅读!!!

“ Ctrl AC!一起 AC!”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ctrl AC

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

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

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

打赏作者

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

抵扣说明:

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

余额充值