[路飞]_leetcode-543-二叉树的直径

249 阅读1分钟

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

[题目地址] [B站地址]

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

示例 :
给定二叉树

          1
         / \
        2   3
       / \     
      4   5    

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

注意: 两结点之间的路径长度是以它们之间边的数目表示。

解题思路如下:

由题意可知,本题的路径长度为边的数目,又因为两点之间的路径必然会有一个顶点,为它们的公共祖先节点

所以我们可以求得每个节点为顶点的路径,如下图:

leetcode-543-二叉树的直径.png

上图红色数字即为每个节点为顶点的路径长度,所有节点的路径长度的最大值即为二叉树的最大路径长度

代码如下:

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-二叉树的直径

如有任何问题或建议,欢迎留言讨论!