已知一颗树的节点间关系,请编程实现该树的先根遍历。要求:输入:若干行,每行描述了一组双亲节点和孩子节点的关系序偶对(每个节点用不同的大写字母表示,节点小于26个)。且数的度小于5。
时间: 2024-03-09 19:48:51 浏览: 87
好的,这里给您提供一份 C++ 代码,可以实现树的先根遍历。具体的实现思路是利用一个 vector 存储每个节点的孩子节点,并根据先根遍历的顺序递归遍历整棵树。
```c++
#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int MAXN = 26; // 最大节点数
vector<int> children[MAXN]; // 存储每个节点的孩子节点
bool visited[MAXN]; // 标记每个节点是否已经被访问
void preOrderTraversal(int root) {
cout << char(root + 'A'); // 先输出当前节点
visited[root] = true; // 标记当前节点已经被访问
// 遍历当前节点的所有孩子节点
for (int i = 0; i < children[root].size(); i++) {
int child = children[root][i];
if (!visited[child]) {
preOrderTraversal(child); // 递归遍历孩子节点
}
}
}
int main() {
string line;
while (getline(cin, line)) {
int parent = line[0] - 'A';
int child = line[1] - 'A';
children[parent].push_back(child); // 存储父节点和孩子节点的对应关系
}
// 从根节点开始遍历整棵树
for (int i = 0; i < MAXN; i++) {
if (!children[i].empty()) {
preOrderTraversal(i);
break;
}
}
return 0;
}
```
该代码将每个节点的孩子节点存储在一个 vector 中,然后从根节点开始递归遍历整棵树,输出每个节点的编号,最终实现了树的先根遍历。需要注意的是,为了防止死循环,我们需要标记每个节点是否已经被访问过,遍历孩子节点时只遍历未被访问过的节点。
阅读全文