1、涉及字符的时候输入需要注意;
2、本题因为有队列,所以要设置一个node里面要设置一个id,如果只涉及中序遍历的话,可以不用这个参数。
#include<cstdio>
#include<queue>
#include<iostream>
using namespace std;
const int maxn=20;
bool hashtable[maxn]={false};
int n,cnt1=0,cnt2=0;
struct node
{
int lchild,rchild,id;
}a[maxn];
int change(char c)
{
if(c=='-')
return -1;
else
{
hashtable[c-'0']=true;
return c-'0';
}
}
void BFS(int root)
{
queue<node>q;
q.push(a[root]);
while(!q.empty())
{
node temp=q.front();
q.pop();
printf("%d",temp.id);
cnt1++;
if(cnt1!=n)
printf(" ");
else
printf("\n");
if(temp.rchild!=-1)q.push(a[temp.rchild]);
if(temp.lchild!=-1)q.push(a[temp.lchild]);
}
}
void inorder(int root)
{
if(root==-1)return;
inorder(a[root].rchild);
printf("%d",a[root].id);
cnt2++;
if(cnt2!=n)
printf(" ");
inorder(a[root].lchild);
}
int main()
{
int root;
cin>>n;
char c1,c2;
int lc,rc;
for(int i=0;i<n;i++)
{
scanf("%*c%c %c",&c1,&c2);
a[i].lchild=change(c1);
a[i].rchild=change(c2);
a[i].id=i;
}
for(int i=0;i<n;i++)
{
if(hashtable[i]==false)
{
root=i;
break;
}
}
BFS(root);
inorder(root);
}