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

543.二叉树的直径

在这里插入图片描述

1. 题目理解

  • 定义:二叉树的直径是树中任意两个节点之间最长路径的长度(边数)。
  • 这条最长路径可能经过根节点,也可能不经过
  • 注意:直径的长度是边数,而递归中常用的深度是节点数

例如:

    1/ \2   3/ \
4   5
  • 直径 = 3
    路径:4 -> 2 -> 1 -> 3,共 3 条边。

2. 解题思路

要找二叉树直径,可以这样分析:

2.1 关键观察

对于任意一个节点 root

  • 经过该节点的最长路径长度 = 左子树最大深度 + 右子树最大深度
  • 所以我们只需要遍历所有节点,计算每个节点的最长路径长度,取最大值即可。
2.2 递归策略
  • 采用后序遍历(先算左右子树,再算当前节点),因为要先知道左右子树的深度才能算直径。
  • 在递归计算深度的同时,顺便更新全局变量 maxDiameter
2.3 为什么返回深度而不是直径?
  • 父节点的直径需要通过子树深度计算:

    父节点直径 = 左子树深度 + 右子树深度
    
  • 如果递归返回直径而不是深度,父节点就无法正确计算自己的直径。


3. 代码解析

class Solution {// 全局变量,用于记录最大直径int maxDiameter = 0;public:int diameterOfBinaryTree(TreeNode* root) {maxDepth(root);  // 递归计算深度的同时更新 maxDiameterreturn maxDiameter;}// 返回以 root 为根节点的最大深度(节点数)int maxDepth(TreeNode* root) {if (root == nullptr) {return 0; // 空节点深度为 0}// 递归计算左右子树的最大深度int leftMax = maxDepth(root->left);int rightMax = maxDepth(root->right);// 经过当前节点的直径 = 左子树深度 + 右子树深度int myDiameter = leftMax + rightMax;// 更新全局最大直径maxDiameter = max(maxDiameter, myDiameter);// 返回当前节点的最大深度return 1 + max(leftMax, rightMax);}
};

4. 复杂度分析

  • 时间复杂度:O(n)
    每个节点只被访问一次。
  • 空间复杂度:O(h)
    递归栈的深度,h 为树的高度,最坏情况下 O(n)。

http://www.lryc.cn/news/618600.html

相关文章:

  • 【前端:Html】--2.进阶:表单
  • 数字孪生重构园区管理效率:技术落地与产业升级的三重跃迁
  • JVM学习笔记-----图解方法执行流程
  • Nginx 启用 HTTPS:阿里云免费 SSL 证书详细图文教程(新手0.5小时可完成)
  • openssl中,公钥和私钥的区别和作用?
  • API 接口接入开发全演示:淘宝商品数据实时抓取
  • 代码随想录刷题Day29
  • 基于51单片机220V交流电流检测系统过流阈值报警设计
  • 通信接口与通信约规
  • 【牛客刷题】REAL806 放它一马:怪物经验值最大化策略详解
  • 【基于DesignStart的M3 SoC】
  • 终端安全检测和防御技术
  • UGUI源码剖析(6):遮罩的“魔法”与“算法”——从C#到Shader,彻底揭示Mask与RectMask2D的原理
  • OpenHarmony编译与烧录
  • HTTPS服务
  • MCU外设初始化:为什么参数配置必须优先于使能
  • Ceph的FileStore存储引擎详解
  • 如何提升需求分析能力
  • NLP—词向量转换评论学习项目分析
  • 【SpringBoot】05 容器功能 - SpringBoot底层注解的应用与实战 - @Configuration + @Bean
  • IIS Express中可以同时加载并使用.net4.0和.NET 2.0的 DLL
  • 面试八股之从jvm层面深入解析Java中的synchronized关键字
  • 使用pyqt5实现可勾选的测试用例界面
  • MM DEMO-2025 | 北航新融合LLM与多模态交互的无人机导航系统!AirStar,智能空中助手等你来体验
  • 前端/在vscode中创建Vue3项目
  • NoC设计中Router Table的作用
  • Day05 店铺营业状态设置 Redis
  • 【C++】迭代器失效问题
  • THCV215一种高速视频数据收发器,采用低电压差分信号(LVDS)技术支持高速串行数据传输,支持1080p/60Hz高分辨率传输
  • 软考备考(三)