有了刚才1099的基础这个很快就能写出来啦
不过需要注意的是如果是用%c输入的,那么一定要在适合的位置放getchar()来吸收掉\n,我在这里改了好久
#include <stdio.h>
#include <queue>
#include <cctype>
#include <cstring>
#include <vector>
using namespace std;
int n;
const int maxv=15;
struct Node{
int id;
Node* left;
Node* right;
}node[maxv];
bool flag[maxv];
int cnt=0;
void levelorder(Node root){
queue<Node*> q;
q.push(&root);
while(!q.empty()){
Node* top=q.front();
cnt++;
printf("%d",top->id);
if(cnt!=n){
printf(" ");
}else{
printf("\n");
}
q.pop();
if(top->left!=NULL){
q.push(top->left);
}
if(top->right!=NULL){
q.push(top->right);
}
}
}
vector<int> in;
void inorder(Node* root){
if(root==NULL){
return;
}else{
inorder(root->left);
in.push_back(root->id);
inorder(root->right);
}
}
int main(){
memset(flag,false,sizeof(flag));
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++){
node[i].id=i;
char r,l;
scanf("%c %c",&r,&l);
getchar();
if(isdigit(r)){
node[i].right=&node[r-'0'];
flag[r-'0']=true;
}else{
node[i].right=NULL;
}
if(isdigit(l)){
node[i].left=&node[l-'0'];
flag[l-'0']=true;
}else{
node[i].left=NULL;
}
}
int root;
for(int i=0;i<n;i++){
if(flag[i]==false){
root=i;
}
}
levelorder(node[root]);
inorder(&node[root]);
for(int i=0;i<n;i++){
printf("%d",in[i]);
if(i!=n-1){
printf(" ");
}
}
return 0;
}