鱼C论坛

 找回密码
 立即注册
查看: 412|回复: 1

按层次遍历二叉树

[复制链接]
发表于 2024-11-15 16:14:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉树,然后按层次遍历该二叉树并输出结点数据。

输入格式:
字符串形式的先序序列(即结点的数据类型为单个字符)

输出格式:
按层次遍历二叉树的结果

输入样例:
在这里给出一组输入。例如:

ABDG##HI####CE#J##F##
输出样例:
在这里给出相应的输出。例如:

ABCDEFGHJI

这题用C或者C++怎么做
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-11-15 16:35:00 | 显示全部楼层
为了实现这个问题,我们需要执行两个主要步骤:首先根据给定的先序序列构建二叉树,然后对构建的二叉树进行层次遍历。下面是一个用C++实现这个过程的简单代码示例。

  1. #include <iostream>
  2. #include <queue>
  3. #include <string>

  4. using namespace std;

  5. // 定义二叉树节点
  6. struct TreeNode {
  7.     char data;
  8.     TreeNode* left;
  9.     TreeNode* right;
  10.     TreeNode(char val) : data(val), left(nullptr), right(nullptr) {}
  11. };

  12. // 根据先序序列构建二叉树
  13. TreeNode* buildTree(const string& preorder, int& index) {
  14.     if (index >= preorder.length() || preorder[index] == '#') {
  15.         index++;
  16.         return nullptr;
  17.     }
  18.    
  19.     TreeNode* root = new TreeNode(preorder[index++]);
  20.     root->left = buildTree(preorder, index);
  21.     root->right = buildTree(preorder, index);
  22.     return root;
  23. }

  24. // 层次遍历二叉树
  25. void levelOrderTraversal(TreeNode* root) {
  26.     if (!root) return;
  27.    
  28.     queue<TreeNode*> q;
  29.     q.push(root);
  30.     while (!q.empty()) {
  31.         TreeNode* current = q.front();
  32.         q.pop();
  33.         
  34.         cout << current->data;
  35.         
  36.         if (current->left) {
  37.             q.push(current->left);
  38.         }
  39.         if (current->right) {
  40.             q.push(current->right);
  41.         }
  42.     }
  43. }

  44. int main() {
  45.     string preorder;
  46.     cin >> preorder;  // 输入二叉树的先序序列

  47.     // 初始化索引,用于构建二叉树
  48.     int index = 0;
  49.     TreeNode* root = buildTree(preorder, index);
  50.    
  51.     // 层次遍历
  52.     levelOrderTraversal(root);

  53.     return 0;
  54. }
复制代码


### 代码解析:

1. **TreeNode 结构体**:定义二叉树节点,包含节点数据和左右子节点指针。

2. **buildTree 函数**:递归地根据先序序列构建二叉树。如果当前字符是 `#`,表示为空;否则创建节点,并递归构建左右子树。

3. **levelOrderTraversal 函数**:使用队列实现层次遍历(广度优先遍历)。从根节点开始,依次访问节点的左、右子节点。

4. **主函数**:读取输入的先序序列,调用 `buildTree` 构建二叉树,最后调用 `levelOrderTraversal` 输出按层次遍历结果。

使用该程序可以解析给定的二叉树先序序列,并按要求输出层次遍历的结果。输入样例和输出遵循题目要求。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 00:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表