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; 
    }
}
相关推荐
Dfreedom.6 小时前
计算机视觉全景图
人工智能·算法·计算机视觉·图像算法
Morwit7 小时前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
py有趣7 小时前
力扣热门100题之岛屿的数量(DFS/BFS经典题)
leetcode·深度优先·宽度优先
无小道8 小时前
算法——暴力+优化
算法·优化·暴力
Free Tester8 小时前
如何判断 LeakCanary 报告的严重程度
java·jvm·算法
zyq99101_18 小时前
DFS算法实战:经典例题代码解析
python·算法·蓝桥杯·深度优先
智者知已应修善业8 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
广州灵眸科技有限公司8 小时前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法
qinian_ztc8 小时前
frida 14.2.18 安装报错解决
算法·leetcode·职场和发展
AI应用实战 | RE8 小时前
012、检索器(Retrievers)核心:从向量库中智能查找信息
人工智能·算法·机器学习·langchain