树的双亲结构转孩子链表结构
题目描述
给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点
编写程序,输出该树的孩子链表表示法结果。
输入
输入一棵树的双亲表示法,共3行:
第1行输入n,表示树有n个结点
第2行输入n个英文字母,表示每个树结点的数值
第3行输入n个整数,表示每个结点的双亲在数组的下标
输出
按输入的结点顺序输出n行,每行输出结点孩子链表结果,先输出结点的数值,再输出结点的孩子的下标,以空格隔开,最后一个数据后面也有空格
如果链表为空则输出结点数值后,输出-1带空格,具体看样式
输入样例:
7
A B C D E F G
-1 0 0 0 1 1 3
输出样例:
A 1 2 3
B 4 5
C -1
D 6
E -1
F -1
G -1
参考代码:
#include <iostream>
#include <stack>
#include <vector>
#include <queue>
#include <list>
using namespace std;
struct Node {
char name;
int parents_index = -1;
};
int main() {
int n;
cin >> n;
Node *arr = new Node[n];
for (int i = 0; i < n; ++i) {
cin >> arr[i].name;
}
for (int i = 0; i < n; ++i) {
cin >> arr[i].parents_index;
}
for (int i = 0; i < n; ++i) {
cout << arr[i].name << ' ';
int flag = 0;
for (int j = 0; j < n; ++j) {
if (arr[j].parents_index == i) {
cout << j << ' ';
flag = 1;
}
}
if (!flag) {
cout << -1 << ' ';
}
cout << endl;
}
return 0;
}