pata1102

本文介绍了一个使用C++实现的二叉树结构,包括节点定义、初始化、前序翻转、广度优先搜索(BFS)及中序遍历等操作,并通过文件读取方式构建树结构。

%c输入带&

#include<iostream> 
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
const int maxn=50;
struct node{
	//int data;
	int lc,rc;
	bool flag;
}_node[maxn];
int n;
void initial(){
	for(int i=0;i<maxn;i++){
		_node[i].flag=false;
	}
}
void preinvert(int root){
	if(root==-1){
		return;
	}
	int temp=0;
	temp=_node[root].lc;
	_node[root].lc=_node[root].rc;
	_node[root].rc=temp;
	preinvert(_node[root].lc);
	preinvert(_node[root].rc);
	//swap(_node[root].lc,_node[root].rc);
}
int bfcount=0;
void bfs(int root){
	int front;
	queue<int> qu;
	qu.push(root);
	while(!qu.empty()){
		front=qu.front();
		bfcount++;
		if(bfcount<n){
			cout<<front<<' ';
		}else{
			cout<<front<<endl;
		}
		qu.pop();
		if(_node[front].lc!=-1){
			qu.push(_node[front].lc);
		}
		if(_node[front].rc!=-1){
			qu.push(_node[front].rc);
		}
	}
}
int incount=0;
void inorder(int root){
	if(root==-1){
		return;
	}
	inorder(_node[root].lc);
	incount++;
	if(incount<n){
		cout<<root<<' ';
	}else{
		cout<<root<<endl;
	}
	inorder(_node[root].rc);
}
int main()
{
	freopen("in.txt","r",stdin);
	initial();
	cin>>n;
	//scanf("%d",&n);
	char ltemp,rtemp;
	for(int i=0;i<n;i++){//create tree
		getchar();
		scanf("%c %c",<emp,&rtemp);
		if(ltemp!='-'){
			_node[(ltemp-'0')].flag=true;
			_node[i].lc=(ltemp-'0');
		}else{
			_node[i].lc=-1;
		}
		if(rtemp!='-'){
			_node[(rtemp-'0')].flag=true;
			_node[i].rc=(rtemp-'0');
		}else{
			_node[i].rc=-1;
		}
	}
	int rootq;
	for(int i=0;i<n;i++){
		if(_node[i].flag==false){
			rootq=i;
			break;
		}
	}
	preinvert(rootq);
	bfs(rootq);
	inorder(rootq);
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值