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

LeetCode - 543. 二叉树的直径

目录

题目

思路解析

读者可能出现的错误写法

正确写法


题目

543. 二叉树的直径 - 力扣(LeetCode) 

思路解析

这个算法的思路是通过深度优先搜索(DFS)来计算二叉树的直径:

定义直径:二叉树的直径是指树中任意两个节点之间的最长路径长度。这个路径可能会穿过根节点,也可能不穿过。

关键洞察:对于树中的任意一个节点,经过该节点的最长路径长度等于其左子树的最大深度加上右子树的最大深度。

递归计算:

  • 对每个节点,计算其左右子树的最大深度
  • 用左右子树深度之和更新全局最大直径
  • 返回当前节点为根的子树的最大深度(即左右子树深度的较大值加1)

结果:遍历完整棵树后,全局变量 result 中存储的就是树的直径

读者可能出现的错误写法

class Solution {
public:int diameterOfBinaryTree(TreeNode* root) {int result = 0;dfs(root,result);return result;}int dfs(TreeNode* root,int result){if(!root){return 0;}int left = dfs(root->left,result);int right = dfs(root->right,result);result = max(left,right);return max(left,right) + 1;}
};

参数传递问题:result 参数没有使用引用传递,而是值传递。这意味着在 dfs 函数中对 result 的修改不会影响到调用者中的 result 变量。

  • 修正:将参数改为引用类型 int& result

直径计算错误:直径计算应该是左子树深度加右子树深度,而不是取它们的最大值。

  • 修正:result = max(result, left + right);

为啥这个深度要相加? 它算深度不就是算高度吗?

二叉树的直径是指树中任意两个节点之间的最长路径长度。这个路径不一定要经过根节点,但一定会经过某个节点,该节点成为这条路径的"最低公共祖先"。

对于任意一个节点,以它为"最低公共祖先"的最长路径长度是什么?是它左子树的最大深度加上右子树的最大深度。

举例说明:

  • 假设有一个节点N
  • 它的左子树最大深度是L(即从N到左子树最远叶子节点的边数)
  • 它的右子树最大深度是R(即从N到右子树最远叶子节点的边数)
  • 那么经过节点N的最长路径长度就是L+R

这是因为:

  • 最长路径必定从左子树的某个叶子节点,经过节点N,再到右子树的某个叶子节点
  • 为了使路径最长,我们选择左右子树中最深的叶子节点
  • 因此路径长度 = 左子树最大深度 + 右子树最大深度

在递归过程中:

  • 函数返回的是节点的高度(从该节点到最远叶子节点的边数)
  • 而更新直径时,我们考虑的是经过该节点的最长路径(左子树高度+右子树高度)

正确写法

class Solution {
public:int diameterOfBinaryTree(TreeNode* root) {int result = 0;dfs(root,result);return result;}int dfs(TreeNode* root,int result){if(!root){return 0;}int left = dfs(root->left,result);int right = dfs(root->right,result);result = max(result,left+right);return max(left,right) + 1;}
};

相关文章:

  • 如何开发ONLYOFFICE协作空间插件:完整教程
  • 大学生职业发展与就业创业指导教学评价
  • Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
  • std::ratio 简单使用举例
  • Cell的复用及自定义Cell
  • 【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
  • EasyImage实战:结合内网穿透技术实现私有图床部署过程
  • 创客匠人:赋能创始人IP打造,破局知识变现的黄金路径
  • Android实践:查看远程文档
  • 接口自动化测试-效果展示
  • 2025年文化交流与创新教育国际会议(ICCEIE 2025)
  • 合成来源图以在入侵检测系统中进行数据增强
  • RAG质量评估
  • 【易飞】通过信息传递触发时机复制生成品号实现复制品号自动带出原自定义字段数据
  • 马克思主义与社会科学方法论通俗版
  • MeanFlow:何凯明新作,单步去噪图像生成新SOTA
  • DAY 19 常见的特征筛选算法
  • 本周四19点,《国产网络音频传输的今天和明天》开讲!
  • 软件工程教学评价
  • 性能测试|有限元软件分析——以Abaqus隐式静力学求解为例
  • 手机端网站建设的注意事项/百度风云榜游戏
  • 北京网站建设的服务公司/线上广告推广
  • 佛山网站建设骏域网站建设专家/seo零基础教学
  • 做外贸怎样上外国网站/新闻类软文营销案例
  • 福州专业网站建设/中国网络营销公司排名
  • 网站开发增值税/网络推广方案怎么写