题目描述
输入一串二叉树,以及它的先序遍历,判断该先序遍历是否正确,若正确则输出 Right
,若不正确,则输出正确的先序遍历。
输入格式
第一行为二叉树的结点数 𝑛(1≤𝑛≤100)。
之后 𝑛 行,每行包含 3 个整数,分别为当前结点序号,以及其左右儿子序号,用空格隔开。( -1
表示空结点)
保证:
这 𝑛 个结点的编号为 1∼𝑛 。
第一行为根结点的信息。
最后一行:一行 𝑛 个整数,为给定的先序遍历,空格隔开。
输出格式
输出一行,Right
或正确的先序遍历的序列( 1 个空格隔开)。
样例 #1
样例输入 #1
5
3 1 2
1 5 4
2 -1 -1
5 -1 -1
4 -1 -1
5 1 4 3 2
样例输出 #1
3 1 5 4 2
样例输入 #2
5
3 1 2
1 5 4
2 -1 -1
5 -1 -1
4 -1 -1
3 1 5 4 2
样例输出 #2
Right
题解
#include<bits/stdc++.h>
using namespace std;
struct node{
int d,l,r;
}t[105];
int cnt=1,f[105],b;
void p(int root){
if(root==-1){
return;
}
f[cnt]=root;
cnt++;
p(t[root].l);
p(t[root].r);
}
int main(){
int n,a,b,c,root;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
if(i==1){
root=a;
}
t[a].d=a;
t[a].l=b;
t[a].r=c;
}
p(root);
for(int i=1;i<=n;i++){
cin>>b;
if(b!=f[i]){
for(int j=1;j<=n;j++){
cout<<f[j]<<" ";
}
return 0;
}
}
cout<<"Right";
return 0;
}