二叉树的直径

算法练习day2

二叉树的直径定义为树中任意两个节点之间最长路径的长度。这个路径不一定经过根节点,但路径的长度由它们之间的边数表示。

例如,对于以下二叉树:

text 复制代码
    1
   / \
  2   3
 / \     
4   5

最长路径是节点 4 → 2 → 5(或者 5 → 2 → 4),长度为 3 条边。

在算法实现中,通常使用深度优先搜索(DFS)来计算每个节点的左右子树高度,然后更新直径值:

  • 对于每个节点,计算左子树高度和右子树高度
  • 当前节点可能形成的直径 = 左子树高度 + 右子树高度
  • 全局维护最大直径值

上面代码中的 diameterOfBinaryTree 函数就是基于这个思路实现的。

javascript 复制代码
function diameterOfBinaryTree(root) {
  let ans = 0
  // 返回当前节点子树高度
  function getHeight(node) {
    if (!node) return -1
    const leftH = getHeight(node.left)
    const rightH = getHeight(node.right)
    ans = Math.max(ans, leftH + rightH)
    return Math.max(leftH + rightH) + 1
  }
  getHeight(root)
  return ans
}
相关推荐
白远山2 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
302wanger2 小时前
推荐下我的两个AI信息源
算法
索尔~古德曼2 小时前
CF——错题的集合
算法
SL_staff2 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈
DevRay3 小时前
Java 21虚拟线程深度实战:告别线程池焦虑,百万并发吞吐量直接翻倍(原理+代码+避坑)
java·开发语言
李明卫杭州3 小时前
React 复合事件系统对比解析
前端·javascript·react.js
陌シ未央ゞ3 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法
renhongxia13 小时前
数字孪生不止在工厂:能源、医疗与农业
人工智能·深度学习·算法·机器学习·数字孪生
Navigator_Z3 小时前
LeetCode //C - 1250. Check If It Is a Good Array
c语言·算法·leetcode
free-elcmacom3 小时前
C++学习<1>程序分区
开发语言·c++