树的先序遍历(双亲转先序)
题目描述
给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从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
参考代码:
#include <iostream>
#include <stack>
#include <vector>
#include <queue>
#include <list>
using namespace std;
bool *arr;
void pre_order(pair<char, int> *node, int parents_index, int len) {
for (int i = 0; i < len; ++i)
if (node[i].second == parents_index && arr[i]) {
arr[i] = false;
cout << node[i].first;
pre_order(node, i, len);
}
}
int main() {
int T;
cin >> T;
while (T--) {
int len;
cin >> len;
pair<char, int> node[len];
arr = new bool[len];
for (int i = 0; i < len; ++i) {
cin >> node[i].first;
arr[i] = true;
}
for (int i = 0; i < len; ++i)
cin >> node[i].second;
pre_order(node, -1, len);
cout << endl;
}
return 0;
}