# 树的最长路径
# 题目描述
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例:
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。
# 解题思路
# coding
class Node {
constructor (value, left = null, right = null) {
this.value = value;
this.left = left;
this.right = right;
}
}
function maxDepth (node) {
if (!node) return 0;
return Math.max(maxDepth(node.left), maxDepth(node.right)) + 1;
}
function diameterOfBinaryTree (node) {
if (!node) return 0;
let max = 0;
let maxDepth = function (node) {
if (!node) return 0;
let left = maxDepth(node.left);
let right = maxDepth(node.right);
max = Math.max(left + right, max);
return Math.max(left, right) + 1;
}
maxDepth(node);
return max;
}
验证:
let tree = new Node(
-9,
new Node(
-5,
new Node(
9,
new Node(
6,
new Node(
0,
null,
new Node(-9)
),
new Node(6)
)
),
new Node(
-7,
null,
new Node(
-9,
null,
new Node(-9)
)
)
),
new Node(-9)
)
console.log(diameterOfBinaryTree(tree)) // 7
阅读全文