543. 二叉树的直径

543. 二叉树的直径

思路:直径一定是「叶子 <---> 叶子」,所以我们可以递归求经过每个结点(分隔左右子树)的直径,注意前置条件是先获取左右子树的高度
时间:O(n),空间:O(n)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private int maxDiameter = 0;

    public int dp(TreeNode root) {
        if(root == null) return 0;
        int leftH = dp(root.left);
        int rightH = dp(root.right);
        // 容易出错的地方!!!
        if(root.left != null) leftH += 1;
        if(root.right != null) rightH += 1;

        maxDiameter = Math.max(maxDiameter, leftH+rightH);
        return Math.max(leftH, rightH);
    }

    public int diameterOfBinaryTree(TreeNode root) {
        dp(root);

        return maxDiameter;
    }
}
全部评论

相关推荐

03-31 00:39
门头沟学院 C++
南岗痞子:不还有俩没结束吗
点赞 评论 收藏
分享
03-27 01:58
已编辑
西北工业大学 Java
在平静中度过当下:如果这个bg也简历挂的话可能他们现在不缺人了吧,我也是这两天投的,阿里和快手投的岗都是简历秒挂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务