本题要求实现一个函数,得到二叉树的层次序列。 函数接口定义: void LevSeq(BiTree T, string &s);写一段程序
时间: 2024-12-17 08:36:56 浏览: 5
当然,这里是一个使用 C++ 实现的二叉树层次遍历的函数,它会将二叉树的节点按照层次顺序添加到一个字符串向量中。假设我们已经有了一个名为 BiTree 的二叉树结构体,并且每个节点都有 left 和 right 子节点。
```cpp
#include <iostream>
#include <vector>
#include <string>
// 假设 BiTree 结构如下,包含一个值和左右子节点指针
struct BiTree {
int val;
BiTree* left;
BiTree* right;
};
void LevSeq(BiTree* root, std::vector<std::string>& s) {
if (!root) return;
// 队列用于保存当前层的节点
std::queue<BiTree*> q;
q.push(root);
while (!q.empty()) {
// 当前层元素个数
int levelSize = q.size();
for (int i = 0; i < levelSize; ++i) {
BiTree* node = q.front(); // 取出队首节点
q.pop();
// 将当前节点的值添加到字符串中
s.push_back(std::to_string(node->val));
// 如果有子节点,加入队列等待处理
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
// 每层结束之后,在结果字符串间添加逗号分隔
s.push_back(",");
}
// 移除最后一个不必要的逗号
if (!s.empty() && s.back() == ',') s.pop_back();
}
// 示例用法:
BiTree* root = createSomeBinaryTree(); // 创建一个二叉树实例
std::vector<std::string> result;
LevSeq(root, result);
for (const auto& level : result) {
std::cout << level << " ";
}
```
在这个函数中,我们首先检查根节点是否存在,然后初始化一个队列并将根节点放入其中。接着,我们进入一个循环,直到队列为空。在循环内部,我们先记录当前层的节点数量,然后依次访问并处理这些节点。每访问完一层,就在结果字符串后面添加一个逗号以表示层级分隔。
阅读全文