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

被折叠的 条评论
为什么被折叠?



