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;
    }
}
全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务