已知一颗树的节点间关系,请编程实现该树的先根遍历。 输入 若干行,每行描述了一组双亲节点和孩子节点的关系序偶对(每个节点用不同的大写字母表示,节点小于26个)。且树的度小于5。 输出 该树的先根遍历序列,序列中每个字母用空格隔开。用c++编译
时间: 2024-03-17 08:43:23 浏览: 178
树的遍历 c++ 编写
下面是使用C++编写的先根遍历树的程序:
```c++
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
unordered_map<char, vector<char>> tree; // 存储树的结构
void preorder(char root) { // 先根遍历函数
cout << root << " "; // 输出当前节点
if (tree.find(root) != tree.end()) { // 如果当前节点有孩子
for (char child : tree[root]) { // 遍历每个孩子节点
preorder(child); // 递归遍历孩子节点
}
}
}
int main() {
string line;
while (getline(cin, line)) { // 读取输入数据
char parent = line[0];
for (int i = 2; i < line.size(); i++) {
char child = line[i];
tree[parent].push_back(child); // 存储树的结构
}
}
cout << "先根遍历序列为:";
preorder('A'); // 从根节点开始遍历
return 0;
}
```
在这个程序中,我们使用了 C++ STL 中的 `unordered_map` 来存储树的结构。具体来说,我们定义了一个 `tree` 的 `unordered_map`,它的键是节点的名称(用大写字母表示),值是一个 `vector`,存储该节点的所有孩子节点。
接着,我们定义了一个 `preorder` 函数,用来实现先根遍历树的功能。在这个函数中,我们先输出当前节点的名称,然后判断当前节点是否有孩子。如果有孩子,我们就遍历每个孩子节点,并递归地调用 `preorder` 函数,以遍历孩子节点的子树。这样,就可以实现先根遍历树的操作了。
最后,在 `main` 函数中,我们读取输入数据,存储树的结构,调用 `preorder` 函数,输出先根遍历序列。
阅读全文