LeetCode543 二叉树的直径

题目

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

示例 : 
给定二叉树 
    1
   / \
  2   3
 / \     
4   5    

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 
注意:两结点之间的路径长度是以它们之间边的数目表示。

方法

递归法

在计算深度时计算的是节点的个数,题目所求为边的个数,因此要res-1

  • 时间复杂度:O(n),n为二叉树的节点数
  • 空间复杂度:O(h),h为二叉树的深度,每次递归都要分配栈空间,递归的次数取决于二叉树的深度
class Solution {
    int res = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        findMaxDepth(root);
        return res-1;
    }
    private int findMaxDepth(TreeNode root){
        if(root==null){
            return 0;
        }
        int left = findMaxDepth(root.left);
        int right = findMaxDepth(root.right);
        res = Math.max(res,left+right+1);
        return Math.max(left,right)+1;
    }
}
posted @   你也要来一颗长颈鹿吗  阅读(32)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示