0
点赞
收藏
分享

微信扫一扫

PAT (Advanced Level) Practice - 1102 Invert a Binary Tree(25 分)

王小沫 2022-05-23 阅读 32


题目链接:​​点击打开链接​​

题目大意:建造一颗反转二叉树并输出反转后的层序遍历和中序遍历。

解题思路:一开始输入的时候就把 L 和 R 的位置换一下,OK。

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
#define MOD 1000000007

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;
}


举报

相关推荐

pat甲级1102 Invert a Binary Tree

0 条评论