hot100 543.二叉树的直径

思路:DFS,每个节点求它左右两边节点的最大深度之和,然后递归求最大值,在递归的过程中需要求出每个节点的深度。

1.本题有两个关键概念:

(1)链:从node的子树的叶子节点到node节点的路径,其实就是深度。

(2)直径:就是由两条(或者一条)链拼成的路径。

2.确定参数和返回值:

(1)参数:需传入根节点root。

(2)返回值:返回当前子树的深度。

3.确定终止条件:当前节点为null时,代表空节点,空节点的链长是-1。

4.确定单层递归的逻辑:

(1)左:求左子树的深度。

(2)右:求右子树的深度。

5.注意:直径可能在root下面的某个节点拐弯,不一定会经过root。

6.复杂度分析:

(1)时间复杂度:O(n),其中n为二叉树的节点个数。

(2)空间复杂度:O(n),最坏情况下,二叉树退化成一条链,递归需要O(n)的栈空间。

附代码:

java 复制代码
class Solution {
    //表示最长直径
    private int res = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        if(root == null || (root.left == null && root.right == null)){
            return 0;
        }
        //求最长直径
        maxDepth(root);
        return res;
    }

    private int maxDepth(TreeNode root){
        if(root == null){
            return 0;
        }
        //求左孩子的深度
        int leftDepth = maxDepth(root.left);
        //求右孩子的深度
        int rightDepth = maxDepth(root.right);
        //更新最长直径,最长直径就是某个节点的左孩子深度+右孩子深度
        res = Math.max(res,leftDepth + rightDepth);
        //返回给递归调用的上层,让上层节点知道这个子树的深度是多少
        return Math.max(leftDepth,rightDepth) + 1; 
    }
}
相关推荐
wabs666几秒前
关于动态规划【力扣343.整数拆分的递推公式怎么理解?】
算法·leetcode·动态规划
测试狗科研平台1 分钟前
第一性原理CO2还原反应计算流程和软件推荐
科技·算法·云计算
SEO_juper2 分钟前
2026 谷歌 SEO&GEO 常见问题合集:收录、排名、内容、技术全解析
算法·谷歌·常见问题·seo·跨境电商·外贸·geo
叫我:松哥14 分钟前
基于卷积神经网络的静态手势语识别算法,在测试集上的识别准确率达到97.5%
人工智能·python·深度学习·神经网络·算法·cnn
珊瑚里的鱼17 分钟前
【动态规划】买卖股票的最佳时机含手续费
算法·动态规划
2401_8856651939 分钟前
从零搭建卷积神经网络:基于PyTorch实现MNIST手写数字分类
pytorch·python·神经网络·算法·机器学习·分类·cnn
bIo7lyA8v39 分钟前
算法优化的多层缓存映射与访问调度模型的技术8
算法
dongf20191 小时前
R语言朴素贝叶斯算法---iris数据集
开发语言·算法·数据分析·r语言
小O的算法实验室1 小时前
2025年KBS,基于强化学习离散状态转移算法+复杂约束下多无人机任务分配
算法
weixin_307779131 小时前
从“大海捞针”到“主动推理”:AI如何重塑云原生故障诊断的根因链
开发语言·人工智能·算法·自动化·原型模式