题目描述
给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点
编写程序,输出该树的先根遍历结果。
输入
第一个输入t,表示有t棵树
接着每棵树输入3行:
第1行输入n,表示树有n个结点
第2行输入n个英文字母,表示每个树结点的数值
第3行输入n个整数,表示每个结点的双亲在数组的下标
以此类推输入下一棵树
输出
共输出t行,每行输出一棵树的先根遍历结果
样例输入
2
7
A B C D E F G
-1 0 0 0 1 1 3
10
A B C D R E F G H K
4 4 4 0 -1 0 2 6 6 6
样例输出
ABEFCDG
RADEBCFGHK
//从-1开始,从左往右依次打开父节点为当前位置的节点,
#include <iostream>
using namespace std;
struct node {
char c;
int p;
};
void preorder(node N[], int m, int g) {
for (int i = 0; i < m; i++)
if (N[i].p == g) {
cout << N[i].c;
preorder(N, m, i);
}
}
int main() {
int n;
cin >> n;
while (n--) {
int m;
cin >> m;
node N[m];
for (int i = 0; i < m; i++)
cin >> N[i].c;
for (int i = 0; i < m; i++)
cin >> N[i].p;
preorder(N, m, -1);
cout << endl;
}
}