【LeetCode】543. 二叉树的直径

题目链接:

543. 二叉树的直径

题目描述:

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

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

示例:

给定二叉树:

         1
        / \
       2   3
      / \     
     4   5    

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

思路:

首先需要明确二叉树的直径是什么,不然就容易犯这样的错误:直径 = 左子树高度 + 右子树高度

题目中已经说明:二叉树的直径长度是任意两个结点路径长度中的最大值。也就是说,这条路径可能经过根结点,也可能不经过根节点。

如图所示,左子树高度 + 右子树高度 = 7,而正确答案应该是 8。直径最长路径之一:[1, 0, 6, 8, 9, 7, 6, 9, 2]

因此不能简单地将根节点的左右子树高度相加,而应该遍历所有节点,记录以此节点为根的子树的直径:左子树高度 + 右子树高度,取最大值。

root的直径 = root左子树高度 + root右子树高度

root的高度 = max {root左子树高度, root右子树高度} + 1

代码实现:

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

    public int diameterOfBinaryTree(TreeNode root) {
        depth(root);
        return result;
    }
    
    private int depth(TreeNode node) {
        // 递归出口
        if (node == null) {
            return 0;
        }
        // 递归
        int leftDepth = depth(node.left);
        int rightDepth = depth(node.right);
        result = Math.max(result, leftDepth + rightDepth);
        // 返回以此节点为根的树的深度
        return Math.max(leftDepth, rightDepth) + 1;
    }
}
全部评论

相关推荐

03-06 12:44
已编辑
吉林大学 Java
是个千人厂,没听过名字。1. 做一个自我介绍。2. 你这个项目和技术栈从哪里学的?有报辅导班嘛[答 都是是自己网上学的,学校教的东西没用]3. 我看了你放在github上的项目,前端也是你写的嘛[答 AI写的,90%精力用于后端开发,前端单纯用于作为后端逻辑的可视化技术验证(骗你的其实后端也是AI写的)]4. 好,你觉得这些技术栈研究得最深刻的是哪个[答 八股压根没背到后面,昨晚背了MySQL就说MySQL]5. 那讲一下MySQL的索引[答 从B+树选型一路吟唱到联合索引,索引失效]6. 联合索引ABC问题,AB走索引嘛,BC走索引嘛?BAC走索引嘛?A or B 走索引嘛[走,不走,走,不走。面试官点头说可以]7. 讲一下项目里Redission分布式锁实现8. Watchdog机制具体是怎么工作9. 消息队列有考虑过Kafka嘛,怎么选型的10. 你这个项目消息队列可能出现什么问题,怎么解决这个问题?[瞎扯没用的,被面试官引导答了视频处理可能产生消息堆积问题,然后开始吟唱]11. 文件分片自己写的还是用的什么框架?上传进度的Redis数据结构?上传的视频有多大?小分片大小?12. 项目里Redis会话记忆是啥意思?[面试官说不行,没人把这个全放Redis里[生气R]]13. 那这和直接查数据库有什么区别[扯了Token成本和解决幻觉问题之类的,给面试官听笑了,我最后也没绷住]14. 你平时是怎么使用AI coding的15. 算法,给了我一个leedcode链接,一看做过了。然后换了一道三数之和,也做过了。然后面试官说算了,让我讲讲思路吧反问:1.有什么需要提高的地方2.介绍一下部门业务有哪些这个面试官真的感官非常非常好,问问题还疯狂引导,感觉不会也会了。找实习  牛客AI配图神器#
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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