#include<iostream>
#include<queue>
#include<sstream>
#include<cstring>
using namespace std;
int N;
struct node{
int data,left,right;
}n[100];
bool isexist[100]={
false};
int num=0;
void inorder(int root){
if(root==-1)
return;
//if(n[root].right!=-1)
inorder(n[root].right); //这里不要判断,不然会一直运行不了return
cout<<n[root].data;
num++;
if(num<N)
cout<<" ";
// if(n[root].left!=-1)
inorder(n[root].left);
}
int num1;
void layerorder(int root){
queue<int> q;
q.push(root);
while(!q.empty()){
int front=q.front();
cout<<n[front].data;
num1++;
if(num1<N)
cout<<" ";
q.pop();
if(n[front].right!=-1) q.push(n[front].right); //这里判断是为了让有效结点入队
if(n[front].left!=-1) q.push(n[front].left);
}
}
int main(){
cin>>N;
for(int i=0;i<N;i++){
char s[3];
cin>>s;
if(!strcmp(s,"-")){
n[i].data=i;
n[i].left=-1;
}
else{
sscanf(s,"%d",&n[i].left);
n[i].data=i;
isexist[n[i].left]=true;
}
cin>>s;
if(!strcmp(s,"-")){
n[i].right=-1;
n[i].data=i;
}
else{
sscanf(s,"%d",&n[i].right);
n[i].data=i;
isexist[n[i].right]=true;
}
}
int root;
for(root=0;isexist[root];root++);
layerorder(root);
cout<<endl;
inorder(root);
return 0;
}
1102 Invert a Binary Tree (25 分)静态二叉树可以在输入时建好,然后遍历的时候先访问柚子树即可
猜你喜欢
转载自blog.csdn.net/qq_42835526/article/details/113698724
今日推荐
周排行