c++已知一颗树的节点间关系,请编程实现该树的先根遍历。 输入 若干行,每行描述了一组双亲节点和孩子节点的关系序偶对(每个节点用不同的大写字母表示,节点小于26个)。且数的度小于5。 输出 该树的先根遍历序列,序列中每个字母用空格隔开。
时间: 2024-03-09 09:51:41 浏览: 61
下面是C++的实现代码:
```
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
const int MAXN = 26;
// 定义树节点结构体
struct TreeNode {
char val; // 节点值
vector<TreeNode*> children; // 孩子节点指针数组
TreeNode(char c) : val(c) {}
};
int main() {
TreeNode* nodes[MAXN] = {}; // 节点指针数组,初始化为NULL
int parent, child;
// 读入节点关系
while (cin >> parent >> child) {
if (nodes[parent] == NULL) {
nodes[parent] = new TreeNode('A' + parent);
}
if (nodes[child] == NULL) {
nodes[child] = new TreeNode('A' + child);
}
nodes[parent]->children.push_back(nodes[child]);
}
// 先根遍历
stack<TreeNode*> s;
s.push(nodes[0]); // 根节点入栈
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
cout << node->val << " "; // 输出节点值
for (int i = node->children.size() - 1; i >= 0; i--) {
s.push(node->children[i]); // 孩子节点入栈
}
}
cout << endl;
return 0;
}
```
希望对您有帮助!
阅读全文