二叉树的直径

算法练习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
}
相关推荐
paopaokaka_luck1 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
梦雨生生3 小时前
java开发工具(学习第一天)
java·开发语言·学习
光影少年3 小时前
RN的Fabric 渲染流程
运维·前端·javascript·react native·react.js·fabric
营养充电站4 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
人工智能·算法·docker·jupyter
啊啊啊啊啊!!!!4 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
技术小黑4 小时前
RNN算法实战系列05 | 天气预测
人工智能·rnn·算法
用户938515635075 小时前
React Router 进阶:路由守卫、登录鉴权与状态传递
前端·javascript·全栈
kyriewen5 小时前
我重写了自己用了两年的防抖节流Hook——发现里面藏着3个隐藏bug
前端·javascript·面试