我的代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <stdio.h>
#include <math.h>
#include <queue>
#include <stack>
#include <cstring>
const int maxn=100;
using namespace std;
int num;
struct Node
{
int lchild,rchild;
} node[maxn];
bool visit[maxn]= {false};
int tonum(char x)
{
if(x=='-')
{
return -1;
}
else
{
visit[x-'0']=true;
return x-'0';
}
}
int n=0;
void print(int id){
printf("%d",id);
n++;
if(n<num){
printf(" ");
}
}
void leverorder(int root)
{
queue<int> q;
q.push(root);
int n=0;
while(!q.empty())
{
int a=q.front();
if(a!=-1)
{
if(node[a].lchild!=-1)
q.push(node[a].lchild);
if(node[a].rchild!=-1)
q.push(node[a].rchild);
}
print(a);
q.pop();
}
}
void inorder(int root)
{
if(root==-1){
return;
}
inorder(node[root].lchild);
print(root);
inorder(node[root].rchild);
}
void postorder(int i)
{
if(i==-1)
{
return;
}
postorder(node[i].lchild);
postorder(node[i].rchild);
swap(node[i].lchild,node[i].rchild);
}
int main()
{
scanf("%d",&num);
for(int i=0; i<num; i++)
{
char a,b;
scanf("%*c%c %c",&a,&b);
node[i].lchild=tonum(a);
node[i].rchild=tonum(b);
}
int root;
for(int i=0; i<num; i++)
{
if(visit[i]==false)
{
root=i;
break;
}
}
postorder(root);
leverorder(root);
printf("\n");
n=0;
inorder(root);
printf("\n");
}