|
发表于 2024-11-15 16:35:00
|
显示全部楼层
为了实现这个问题,我们需要执行两个主要步骤:首先根据给定的先序序列构建二叉树,然后对构建的二叉树进行层次遍历。下面是一个用C++实现这个过程的简单代码示例。
- #include <iostream>
- #include <queue>
- #include <string>
- using namespace std;
- // 定义二叉树节点
- struct TreeNode {
- char data;
- TreeNode* left;
- TreeNode* right;
- TreeNode(char val) : data(val), left(nullptr), right(nullptr) {}
- };
- // 根据先序序列构建二叉树
- TreeNode* buildTree(const string& preorder, int& index) {
- if (index >= preorder.length() || preorder[index] == '#') {
- index++;
- return nullptr;
- }
-
- TreeNode* root = new TreeNode(preorder[index++]);
- root->left = buildTree(preorder, index);
- root->right = buildTree(preorder, index);
- return root;
- }
- // 层次遍历二叉树
- void levelOrderTraversal(TreeNode* root) {
- if (!root) return;
-
- queue<TreeNode*> q;
- q.push(root);
- while (!q.empty()) {
- TreeNode* current = q.front();
- q.pop();
-
- cout << current->data;
-
- if (current->left) {
- q.push(current->left);
- }
- if (current->right) {
- q.push(current->right);
- }
- }
- }
- int main() {
- string preorder;
- cin >> preorder; // 输入二叉树的先序序列
- // 初始化索引,用于构建二叉树
- int index = 0;
- TreeNode* root = buildTree(preorder, index);
-
- // 层次遍历
- levelOrderTraversal(root);
- return 0;
- }
复制代码
### 代码解析:
1. **TreeNode 结构体**:定义二叉树节点,包含节点数据和左右子节点指针。
2. **buildTree 函数**:递归地根据先序序列构建二叉树。如果当前字符是 `#`,表示为空;否则创建节点,并递归构建左右子树。
3. **levelOrderTraversal 函数**:使用队列实现层次遍历(广度优先遍历)。从根节点开始,依次访问节点的左、右子节点。
4. **主函数**:读取输入的先序序列,调用 `buildTree` 构建二叉树,最后调用 `levelOrderTraversal` 输出按层次遍历结果。
使用该程序可以解析给定的二叉树先序序列,并按要求输出层次遍历的结果。输入样例和输出遵循题目要求。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|