用静态二叉树,中序遍历和层序遍历都先右再左
#include <iostream>
using namespace std;
#define maxn 20
struct node{
int left;
int right;
}t[maxn];
int n;
void inTraverse(int root,int &index){
if(root==-1)return ;
inTraverse(t[root].right,index);
if(index!=n-1)cout<<root<<" ";
else
cout<<root;
index+=1;
inTraverse(t[root].left,index);
}
void levelTraverse(int root){
int queue[maxn];
int front=0;
int rear=0;
int count=0;
queue[rear++]=root;
while(rear!=front){
int temp=queue[front++];
if(count!=n-1)cout<<temp<<" ";
else
cout<<temp;
count++;
if(t[temp].right!=-1)
queue[rear++]=t[temp].right;
if(t[temp].left!=-1)
queue[rear++]=t[temp].left;
}
}
int main(){
cin>>n;
int findRoot[n];
int root;
for (int i = 0; i < n; ++i)
findRoot[i]=0;
for (int i = 0; i < n; ++i) {
char child;
cin>>child;
t[i].left=(child=='-')?-1:child-'0';
if(child!='-')findRoot[child-'0']=1;
cin>>child;
t[i].right=(child=='-')?-1:child-'0';
if(child!='-')findRoot[child-'0']=1;
}
for (root = 0; root < n; ++root) {
if(findRoot[root]!=1)break;
}
levelTraverse(root);
cout<<endl;
int index=0;
inTraverse(root,index);
return 0;
}