中序线索二叉树的建立与遍历(from: 王道考研)

文章介绍了如何使用C++实现线程化二叉树的创建函数create(),线程化遍历函数create_inthr()以及中序遍历函数inorder(),展示了如何构建并操作这种数据结构。
摘要由CSDN通过智能技术生成
#include<iostream>
using namespace std;
typedef struct bnd {
	char data;
	struct bnd *lch,*rch;      /*左右孩子指针*/
	int ltag,rtag;             /*左右标志*/
	bnd():data(' '),lch(NULL),rch(NULL),ltag(0),rtag(0){}
} bnd,*btr;
btr pre;
void create(btr &t){
	char ch; cin>>ch;
	if(ch=='#') t=NULL;
	else{
		t=new bnd;
		t->data=ch;
		create(t->lch);
		create(t->rch);
	}
}
void visit(btr q){
	if(q->lch==NULL){
		q->lch=pre;
		q->ltag=1;
	}
	if(pre!=NULL&&pre->rch==NULL){
		pre->rch=q;
		pre->rtag=1;
	}
	pre=q;
}
void inthr(btr t){
	if(t!=NULL){
		inthr(t->lch);
		visit(t);
		inthr(t->rch);
	}
}
void create_inthr(btr t){
	pre=NULL;
	if(t!=NULL){
		inthr(t);
		if(pre->rch==NULL)
			pre->rtag=1;
	}
}
btr firstnd(btr p){
	while(p->ltag==0) p=p->lch;
	return p;
}
btr nextnd(btr p){
	if(p->rtag==0) return firstnd(p->rch);
	else return p->rch;
}
void inorder(btr t){
	for(btr p=firstnd(t);p!=NULL;p=nextnd(p)){
		cout<<p->data<<' ';
	}
}
int main() {
	btr t;
	btr th;
	cout<<"Input the Threaded BinaryTree 's node:"<<endl;
	create(t);
	create_inthr(t);
	cout<<"InOrderTraverse_Thr:"<<endl;
	inorder(t);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值