「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意: 两结点之间的路径长度是以它们之间边的数目表示。
解题思路如下:
由题意可知,本题的路径长度为边的数目,又因为两点之间的路径必然会有一个顶点,为它们的公共祖先节点
所以我们可以求得每个节点为顶点的路径,如下图:
上图红色数字即为每个节点为顶点的路径长度,所有节点的路径长度的最大值即为二叉树的最大路径长度
代码如下:
var diameterOfBinaryTree = function(root) {
let res = 0;
// 获取树高
function getHeight(root){
if(root === null) return 0;
const l = getHeight(root.left),
r = getHeight(root.right)
// 获取该节点的路径长度
res = Math.max(res,l+r)
// 返回树高
return Math.max(l,r)+1
}
getHeight(root);
return res;
};
至此我们就完成了 leetcode-543-二叉树的直径
如有任何问题或建议,欢迎留言讨论!