当前位置: 首页 > article >正文

18924 二叉树的宽度

### 思路
1. 使用广度优先搜索(BFS)遍历二叉树,记录每一层的节点数。
2. 使用队列来实现BFS,队列中存储节点和其对应的层数。
3. 在遍历过程中,更新每一层的节点数,并记录最大节点数。

### 伪代码
1. 定义二叉树节点结构 `TreeNode` 和二叉树指针 `Tree`.
2. 定义 `CreateTree` 函数:
   - 读取输入,构造二叉树。
3. 定义 `TreeWidth` 函数:
   - 使用队列进行BFS遍历。
   - 记录每一层的节点数,并更新最大节点数。
4. 在 `main` 函数中:
   - 调用 `CreateTree` 构造二叉树。
   - 调用 `TreeWidth` 计算二叉树的宽度。
   - 输出二叉树的宽度。

### C++代码

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

TreeNode* CreateTree(int n, vector<pair<int, int>>& edges) {
    vector<TreeNode*> nodes(n + 1, nullptr);
    for (int i = 1; i <= n; ++i) {
        nodes[i] = new TreeNode(i);
    }
    for (auto& edge : edges) {
        int parent = edge.first;
        int child = edge.second;
        if (!nodes[parent]->left) {
            nodes[parent]->left = nodes[child];
        } else {
            nodes[parent]->right = nodes[child];
        }
    }
    return nodes[1];
}

int TreeWidth(TreeNode* root) {
    if (!root) return 0;
    queue<pair<TreeNode*, int>> q;
    q.push({root, 0});
    vector<int> level_count(51, 0); // Since n <= 50
    int max_width = 0;
    while (!q.empty()) {
        auto node = q.front().first;
        int level = q.front().second;
        q.pop();
        level_count[level]++;
        max_width = max(max_width, level_count[level]);
        if (node->left) q.push({node->left, level + 1});
        if (node->right) q.push({node->right, level + 1});
    }
    return max_width;
}

int main() {
    int n;
    cin >> n;
    vector<pair<int, int>> edges(n - 1);
    for (int i = 0; i < n - 1; ++i) {
        cin >> edges[i].first >> edges[i].second;
    }
    TreeNode* root = CreateTree(n, edges);
    cout << TreeWidth(root) << endl;
    return 0;
}


http://www.kler.cn/a/320253.html

相关文章:

  • 基于Java Springboot甘肃旅游管理系统
  • 详细分析ipvsadm负载均衡的命令
  • Leetcode 3355 Zero Array Transformation
  • 关于Qt C++中connect的几种写法
  • 智谱AI清影升级:引领AI视频进入音效新时代
  • torch.is_storage()
  • 修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)
  • 如何分析开源项目
  • 如何使用numpy反转数组
  • 使用Python解决数据分析中的相关性分析
  • 论前端框架的对比和选择 依据 前端框架的误区
  • AMEYA360代理:兆易创新GD32A7系列全新一代车规级MCU介绍
  • 【Python】:列表使用方法! 附带教程源码
  • 手机解压软件加密指南:让文件更安全
  • docker - 迁移和备份
  • PHP安装swoole扩展无效,如何将文件上传至Docker容器
  • Codeforces Round 578 (Div. 2) E题 Compress Words(扩展KMP)
  • 计算机知识竞赛网站设计与实现
  • CVPR2021 安全AI挑战者计划第六期赛道一第二名方案分享 (UM-SIAT队)
  • 木舟0基础学习Java的第二十九天(Spring,Spring的属性注入(xml,注解))
  • 代码随想录Day53|102.沉没孤岛 、103.水流问题 、104.建造最大岛屿
  • Spring Boot 点餐系统:餐饮界的技术革新
  • Packet Tracer - IPv4 ACL 的实施挑战(完美解析)
  • 【C++笔试强训】如何成为算法糕手Day3
  • Linux标准I/O
  • (11)(2.1.2) DShot ESCs(四)