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

【练习】【二叉树】力扣热题100 543. 二叉树的直径

题目

  1. 二叉树的直径

给你一棵二叉树的根节点,返回该树的 直径 。

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

示例 1:

输入:root = [1,2,3,4,5]

输出:3

解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

示例 2:

输入:root = [1,2]

输出:1

来源:力扣热题100 543. 二叉树的直径


思路(注意事项)

depth返回时,要在左右子树的最大深度+1,此为节点与子树的连接路径。


纯代码

class Solution {
private:
    int ans = 0;
    int depth(TreeNode* root)
    {
        if (!root) return 0;
        
        int l = depth(root -> left);
        int r = depth(root -> right);
        ans = max (ans, l + r);

        return max (l, r) + 1;
    }
public:
    int diameterOfBinaryTree(TreeNode* root) {
        depth(root);
        return ans;
    }
};

题解(加注释)

class Solution {
private:
    int ans = 0; // 用于记录二叉树的最大直径

    // 递归计算二叉树的深度,并更新最大直径
    int depth(TreeNode* root) {
        if (!root) return 0; // 如果当前节点为空,返回深度 0

        // 递归计算左子树的深度
        int l = depth(root->left);

        // 递归计算右子树的深度
        int r = depth(root->right);

        // 更新最大直径:当前节点的直径 = 左子树深度 + 右子树深度
        ans = max(ans, l + r);

        // 返回当前子树的深度:左右子树深度的最大值 + 1(当前节点)
        return max(l, r) + 1;
    }

public:
    int diameterOfBinaryTree(TreeNode* root) {
        depth(root); // 从根节点开始计算深度
        return ans;  // 返回最大直径
    }
};

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

相关文章:

  • Sourcetrail 代码分析工具
  • 生产制造业务的核心--全面质量管理人机料法环
  • 基于Matlab/Simulink永磁直驱风电低电压穿越(LVRT)控制仿真模型
  • Unity3D 布料模拟(Cloth Simulation)详解
  • uniapp x 学习之 uts 语言快速入门
  • 《DeepSeek从部署到安全分析实战》
  • 学习日记-250305
  • 2024 年 6 月大学英语四级考试真题(第 2 套)——解析版
  • Vue3 Suspense 终极指南:原理、用法与替代方案
  • 【Linux】使用问题汇总
  • 聊天室Python脚本——ChatGPT,好用
  • 我们来学nginx -- 优化下游响应速度
  • centos搭建 Node.js 开发环境
  • 深入解析SpringMVC中Http响应的实现机制
  • ESP8266连接网络实时上传数据
  • 安当KSP密钥管理系统:为无线局域网安全运行构建双重认证与密钥管理一体化解决方案
  • ZYNQ-PL学习实践(四)IP核之读写RAM
  • 使用vivado2023.2新版Vitis创建hello world项目以及新版vitis的一些说明
  • 前端基础之组件自定义事件
  • 项目工坊 | Python驱动淘宝信息爬虫