算法练习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
}