本题需注意输入的时候是字符的形式。
#include<cstdio>
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
const int maxn=100;
bool hashtable[maxn]={false};
struct Node
{
int data;
int lchild;
int rchild;
}node[maxn];
int cnt=0,cnt2=0,n;
int strTonum(char c)
{
if(c=='-')return -1;
else
{
int num=c-'0';
hashtable[num]=true;
return num;
}
}
void BFS(int root)
{
queue<Node>q;
q.push(node[root]);
while(!q.empty())
{
Node temp=q.front();
q.pop();
printf("%d",temp.data);
cnt++;
if(cnt!=n)
printf(" ");
else
printf("\n");
if(temp.rchild!=-1) q.push(node[temp.rchild]);
if(temp.lchild!=-1) q.push(node[temp.lchild]);
}
}
void Pos(int root)
{
if(root==-1)
return ;
Pos(node[root].rchild);
printf("%d",root);
cnt2++;
if(cnt2!=n)
printf(" ");
Pos(node[root].lchild);
}
int main()
{
cin>>n;
char a,b;
int root;
for(int i=0;i<n;i++)
{
scanf("%*c%c %c",&a,&b);
node[i].data=i;
node[i].lchild=strTonum(a);
node[i].rchild=strTonum(b);
}
for(int i=0;i<n;i++)
{
if(hashtable[i]==false)
{
root=i;
break;
}
}
BFS(root);
Pos(root);
}