leetcode543. 二叉树的直径(easy)

二叉树的直径


力扣链接

题目描述

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

示例 :
给定二叉树

          1
         / \
        2   3
       / \     
      4   5    

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

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

解题思路

官方题解链接

  • dfs

建议先看leetcode104,这类题目看答案能看懂,自己想想不出来

代码

class Solution {
   //存储最长路径的节点个数
    int res = 0;

    public int diameterOfBinaryTree(TreeNode root) {
        depth(root);
        //res存储的是路径最大的节点个数,而最大的路径长度为点数-1
        return res - 1;
    }

    int depth(TreeNode root) {
        if (root == null) {
            return 0;
        }

        //左子树高度
        int l = depth(root.left);
        //右子树高度
        int r = depth(root.right);

        //存储res和l+r+1中的最大值,l+r+1 即root节点的两个子树的高度+1就是以root为根节点的最长两个路径上的点的个数;
        res = Math.max(res, l + r + 1);

        //返回以root为根节点的数的高度
        return Math.max(l, r) + 1;
    }
}

复杂度

leetcode543. 二叉树的直径(easy)

上一篇:.Net Core跨平台应用研究-HelloDDNS(动态域名篇)


下一篇:leetcode1614. 括号的最大嵌套深度