c++写已知一颗树的节点间关系,请编程实现该树的先根遍历。 输入 若干行,每行描述了一组双亲节点和孩子节点的关系序偶对(每个节点用不同的大写字母表示,节点小于26个)。且树的度小于5。 输出 该树的先根遍历序列,序列中每个字母用空格隔开。
时间: 2024-03-16 13:42:14 浏览: 197
好的,这里给出一个简单的C++实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 26; // 最多有26个节点
vector<int> children[MAXN]; // 存储每个节点的所有子节点
void preorder_traversal(int node) {
cout << (char)(node + 'A'); // 输出当前节点名
for (int i = 0; i < children[node].size(); i++) {
preorder_traversal(children[node][i]); // 递归遍历子节点
}
}
int main() {
int parent, child;
while (cin >> parent >> child) {
children[parent].push_back(child); // 记录父节点和子节点的关系
}
preorder_traversal(0); // 从根节点开始先根遍历
cout << endl;
return 0;
}
```
这个程序使用一个`children`数组来存储每个节点的所有子节点。然后,在输入阶段,我们读入每个节点的父节点和子节点,并将它们添加到`children`数组中。最后,我们从根节点开始进行先根遍历,并输出遍历序列。请注意,根节点的编号为0,因为题目中要求每个节点用不同的大写字母表示。
阅读全文