题目链接:点击打开链接
题目大意:建造一颗反转二叉树并输出反转后的层序遍历和中序遍历。
解题思路:一开始输入的时候就把 L 和 R 的位置换一下,OK。
AC 代码
using namespace std;
typedef long long ll;
vector<int> v[20];
int n,f;
int vis[10];
void bfs(int rt)
{
queue<int> q;
q.push(rt);
while(!q.empty())
{
rt=q.front(); q.pop();
if(f){ printf("%d",rt); f=0; }
else printf(" %d",rt);
if(v[rt][0]!=-1) q.push(v[rt][0]);
if(v[rt][1]!=-1) q.push(v[rt][1]);
}
}
void inOrder(int rt)
{
if(v[rt][0]!=-1) inOrder(v[rt][0]);
if(f){ printf("%d",rt); f=0; }
else printf(" %d",rt);
if(v[rt][1]!=-1) inOrder(v[rt][1]);
}
int main()
{
char l,r;
while(~scanf("%d",&n))
{
mem(vis,0);
for(int i=0;i<n;i++)
{
getchar();
scanf("%c %c",&r,&l); // 注意一开始输入的时候就反着来
if(l=='-') v[i].push_back(-1);
else{ v[i].push_back(l-'0'); vis[l-'0']=1; }
if(r=='-') v[i].push_back(-1);
else{ v[i].push_back(r-'0'); vis[r-'0']=1; }
}
int rt;
for(int i=0;i<n;i++) if(vis[i]==0){ rt=i; break; }
f=1; bfs(rt); puts("");
f=1; inOrder(rt); puts("");
}
return 0;
}