PAT A1102 Invert a Binary Tree (25分)
反转树可以在构建树的过程中完成
层序遍历的方式类似于BFS
#include<cstdio>
#include<algorithm>
#include <vector>
#include<queue>
using namespace std;
const int N = 10;
struct node{
int v;
int left = -1;
int right =-1;
}Node[N];
bool isroot[N];
vector<int> in,bfs;
int chartoint(char a){//0..9
if(a>='0'&&a<='9'){
return (a -'0');
}else{
return -1;
}
}
void BFS(int root){
if(root==-1) return;
queue<int> q;
q.push(root);
while(q.empty()==false){
int f = q.front();
q.pop();
if(Node[f].left!=-1)
q.push(Node[f].left);
if(Node[f].right!=-1)
q.push(Node[f].right);
bfs.push_back(f);
}
return;
}
void inOrder(int root){
if(root==-1) return;
inOrder(Node[root].left);
in.push_back(Node[root].v);
inOrder(Node[root].right);
return;
}
int main(){
int n;
scanf("%d",&n);
fill(isroot,isroot+N,true);//初始化
for(int i = 0;i<n;i++){
char l,r;
getchar();//吸收\n
scanf("%c %c",&l,&r);
Node[i].left = chartoint(r);//插入时就更换左右子树的位置
Node[i].right = chartoint(l);
Node[i].v = i;
if(Node[i].left!=-1) isroot[Node[i].left] = false;
if(Node[i].right!=-1) isroot[Node[i].right] = false;
}
int root = -1;
for(int i = 0;i<n;i++){
if(isroot[i]==true){
root = i;
break;
}
}
BFS(root);
inOrder(root);
for(int i = 0;i < n;i++){
printf("%d",bfs[i]);
if(i!=n-1) printf(" ");
}
printf("\n");
for(int i = 0;i < n;i++){
printf("%d",in[i]);
if(i!=n-1) printf(" ");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步