543. 二叉树的直径 + 树递归

543. 二叉树的直径

LeetCode_543

题目描述

代码实现

  1. 代码撰写的时候需要注意的是left+right+1会多算一个结点。
  2. 在返回最终答案的时候需要减去一个结点(树的高度决定的)。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int maxSum = 1;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return maxSum - 1;
    }
    public int dfs(TreeNode root){
        if(root == null)
            return 0;
        int left = dfs(root.left);
        int right = dfs(root.right);
        maxSum = Math.max(maxSum, left + right + 1);
        return Math.max(left, right) + 1;
    }
}

复杂度分析

  • 时间复杂度:O(N),其中 N 为二叉树的节点数,即遍历一棵二叉树的时间复杂度,每个结点只被访问一次。
  • 空间复杂度:O(Height),其中 Height 为二叉树的高度。由于递归函数在递归过程中需要为每一层递归函数分配栈空间,所以这里需要额外的空间且该空间取决于递归的深度,而递归的深度显然为二叉树的高度,并且每次递归调用的函数里又只用了常数个变量,所以所需空间复杂度为 O(Height) 。
posted @   Garrett_Wale  阅读(63)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2020-03-15 蓝桥杯-分巧克力(暴力+二分优化)
2020-03-15 蓝桥杯-包子凑数(完全背包+不定方程的数学性质+多个数的最大公因数)
2020-03-15 蓝桥杯-正则表达式
点击右上角即可分享
微信分享提示