题目描述
给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点
编写程序,输出该树的先根遍历结果。
输入
第一个输入t,表示有t棵树
接着每棵树输入3行:
第1行输入n,表示树有n个结点
第2行输入n个英文字母,表示每个树结点的数值
第3行输入n个整数,表示每个结点的双亲在数组的下标
以此类推输入下一棵树
输出
共输出t行,每行输出一棵树的先根遍历结果
AC代码
#include <iostream>
#include<stack>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
char ch[n];
int in[n];
for(int i = 0;i<n;i++){
cin>>ch[i];
}
for(int i = 0;i<n;i++){
cin>>in[i];
}
int tag;
for(int i = 0;i<n;i++){
if(in[i]==-1){
tag = i;
cout<<ch[i];
}
}
stack <int>sta;
sta.push(tag);
while(!sta.empty()){
tag = sta.top();
int flag=0;
for(int i = 0;i<n;i++){
if(in[i]==tag){
tag = i;
in[i]=-1;
cout<<ch[i];
sta.push(tag);
flag =1;
break;
}
}
if(flag == 0){
sta.pop();
}
}
cout<<endl;
}
}