【重点】【DFS】543.二叉树的直径

最全【Java】【JS】LeetCode - 树 - # 543 二叉树的直径,ZooKeeper的十二连问 我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取。 阅读详情

题目

Python

时间复杂度:O(n),其中 n 为二叉树的节点个数。
空间复杂度:O(n)。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.diameter = 0

    def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
        self.find(root)
        return self.diameter

    def find(self, root):
        if not root:
            return 0

        leftDepth = self.find(root.left)
        rightDepth = self.find(root.right)
        self.diameter = max(leftDepth + rightDepth, self.diameter)

        return 1 + max(leftDepth, rightDepth)

Java

法1:DFS两遍

不太好的方法

class Solution {

    public int diameterOfBinaryTree(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int left = diameterOfBinaryTree(root.left);
        int right = diameterOfBinaryTree(root.right);
        int cur = oneSideDepth(root.left) + oneSideDepth(root.right);

        return Math.max(cur, Math.max(left, right));
    }

    public int oneSideDepth(TreeNode node) {
        if (node == null) {
            return 0;
        } 
        return Math.max(oneSideDepth(node.left), oneSideDepth(node.right)) + 1;
    }
}

法2:最佳DFS

设置全局变量!简化DFS!

class Solution {
    int res = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        if (root == null) {
            return 0;
        }

        maxDepth(root);
        return res;
    }

    public int maxDepth(TreeNode node) {
        if (node == null) {
            return 0;
        }
        int left = maxDepth(node.left);
        int right = maxDepth(node.right);
        res = res >= left + right ? res : left + right;
        return 1 + Math.max(left, right);
    }
}
LeetCode 543. 二叉树的直径 详细技术解析 本文详细解析了LeetCode 543题"二叉树的直径"的解题思路。关键点在于理解直径定义为最长路径的边数而非节点数,通过后序遍历计算每个节点的左右子树深度之和并更新全局最大值。文章提供了完整的Python代码实现,包含注释和边界处理,时间复杂度为O(n)。特别强调了常见误区,如混淆边数与节点数、忽略非根路径等,并通过多个测试案例验证算法正确性。面试中需重点掌握后序遍历的应用和全局变量的使用技巧。 阅读详情

相关推荐

向量数据库安全实战:从Embedding反推到检索越权的全链路防护

随着RAG应用在企业中的普及,向量数据库已成为知识库系统的核心组件。但许多团队对向量数据的安全认知仍停留在传统数据库的账号密码、网络隔离和磁盘加密上。事实上,向量化并非加密,而是一种有损压缩的语义映射,向量本身可以被反推模型还原出原文关键信息,形成高保真的语义泄露通道。同时,相似度检索的模糊匹配特性打破了传统行列权限模型,使得越权检索和成员推断攻击成为新的安全威胁。理解这些原理,有助于企业在数据采集、向量化、索引构建、检索查询等环节构建分层防护体系,包括脱敏、扰动、过滤下推、网关控制等手段。本文从基础概念出

weixin_29323551的博客 259

LeetCode经典算法面试题 #543:二叉树的直径(深度优先搜索、迭代后续遍历等多种实现方案详细解析)

本文介绍了计算二叉树直径的算法。直径定义为树中任意两节点间最长路径的边数。关键思路是通过递归深度优先搜索(DFS)计算每个节点的左右子树深度,并在过程中更新全局最大直径(左右深度之和)。文章提供了递归DFS和迭代后序遍历两种实现,分析了其时间(O(n))和空间复杂度(O(h)或O(n)),并比较了递归简洁性与迭代避免栈溢出的优势。核心解法是利用后序遍历特性,在计算节点深度的同时维护最大直径。

夏日清风 783

手把手教你使用Segformer训练自己的数据

SegFormer 基于Swin transformer 修改

weixin_38353277的博客 2万+

【力扣hot100】 543. 二叉树的直径

本文介绍了计算二叉树直径的算法。二叉树的直径定义为树中任意两节点间最长路径的边数,该路径可能不经过根节点。通过深度优先搜索(DFS)遍历二叉树,在递归过程中计算每个节点的左右子树深度之和,并更新全局最大值。关键点在于:1)直径可能出现在任意子树中;2)需要比较当前节点左右子树深度之和与已知最大值。算法时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。

prowity的博客 502

【大唐杯学习超快速入门】5G技术原理仿真教学——5G网络开通调测与车联网

自用笔记,比较乱。

qq_41224270的博客 1万+

yolov5部署之七步完成tensorRT模型推理加速

目录前言step 1. 下载yolov5源码以及tensorrtx源码,并将yolov5s.pt转为.wts模型step 2. 确定并下载自己准备使用的CUDA版本。step 3. 根据自己的CUDA版本下载对应版本的cuDNN以及TensorRTstep 4. 根据自己使用的VS版本下载对应版本的OpenCVstep 5. 安装CUDAstep 6. 安装cuDNN、TensorRT以及验证TensorRT是否安装成功 前言     前段时间研究了Pytorch的环境配置,之后便从github上下载了yo

Christo的博客 4万+

【二叉树】LC 543.二叉树的直径

本文解析了 LeetCode 543 题「二叉树的直径」的解题思路与实现方法。文章指出,二叉树的直径可定义为任意节点左右子树深度和的最大值。通过递归遍历每个节点,计算其左右子树深度并更新全局最大值,最终得到结果。算法时间复杂度为 O(N),空间复杂度取决于树高(O(H))。代码使用 C++ 实现,通过深度优先搜索(DFS)递归求解,并在过程中动态维护最大直径值。文中还通过示例详细解释了递归过程中节点深度的计算逻辑,强调每个节点的深度为其左右子树最大深度加 1 的原理。

你的博客 233

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2567

leetcode 543:二叉树的直径

leetcode 543:二叉树的直径 543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / 2 3 / 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 **注意:**两结点之间的路径长度是以它们之间边的数目表示。 Related Topi

m0_67392811的博客 337

【OpenClaw从入门到精通】命令行操作指南——TUI模式高效管理OpenClaw(2026避坑版)

本文将详细介绍OpenClaw的命令行操作,重点介绍TUI(Text User Interface)模式的高效使用方法,以及在实际使用中需要避免的常见陷阱。通过本文的学习,你将掌握OpenClaw命令行的精髓,提升工作效率。

一键难忘的博客 1691

模型实战(32)之 yolo26 实现对全身关键点数据集 的训练与关键点检测

模型实战(32)之 yolo26 实现对全身关键点数据集 的训练与关键点检测

yohnyang的博客 89

Leetcode 543. 二叉树的直径 递归

【代码】Leetcode 543. 二叉树的直径 递归。

想买很多漂亮衣服但是买不起的博客 185

【RT-DETR涨点改进】独家创新改进篇 | AAAI2024 | RT-DETR引入CFBlock增强对长程依赖和全局语义信息的建模能力,有助于提升复杂场景下小目标、遮挡目标的检测精度

本文给大家介绍在RT-DETR中引入CFBlock模块,能够有效提升模型对长程依赖和全局语义信息的建模能力,在保持轻量化和高效推理的基础上增强特征表达力,特别有助于提升复杂场景下小目标、遮挡目标的检测精度,从而实现更优的精度与速度平衡。

Ai缝合怪、助力小伙伴高效发论文 260

力扣543.二叉树的直径(java)(迭代法 and 左右根后序遍历迭代法)

在求一个结点的深度时(max(left,right) + 1) ,顺便求出来该结点的直径。二次弹出,模拟的是 : 左右根后序遍历,核心是先处理左右子树的计算,再处理根结点。栈的存储的是 : Object[] 用于放 结点 + 结点访问情况(是否访问过)当然也可以用哈希表来存储。Map<TreeNode, boolean>哈希表存储结点深度,是为了获取左右子树结点的深度,用于计算。直径:一个结点的,左子树最大深度 + 右子树最大深度。最大直径: 所有结点中,的最大的那个。

2401_87338545的博客 354

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

2026年3月21日刷题

今天的题目都是深度优先搜索的,其中路径之和这道题目我想了很久,有必要再做一做,不是那么明白。

m0_52163052的博客 51

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【LeetCodehot100】 T543:二叉树的直径 T102:二叉树的层序遍历

二叉树中任意两个节点之间的最长路径(边数)

2501_92547326的博客 233

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数据结构-非线性结构-树形结构:有序树 ---->二叉树 ----> 深度优先遍历【模板】

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 : 给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。...

u013250861的博客 141

【笔面试算法学习专栏】二叉树遍历专题:前序、中序、后序与层序遍历

本文系统讲解二叉树遍历算法,涵盖前序、中序、后序与层序遍历的递归和迭代实现,分析时间复杂度。选取力扣hot100中五道二叉树题目进行详细解析,包括解题思路、复杂度分析和Python代码实现。

m0_50709695的博客 568

LeetCode 543. 二叉树的直径 - DFS后序与分治优化详解

题目描述:给定一棵二叉树的根节点 root,返回该二叉树的直径(两节点之间最长路径的长度),路径长度以边数计。路径可以穿过根节点,也可以不穿过,必须沿父子边相连。原题链接:https://leetcode.cn/problems/diameter-of-binary-tree/难度等级:Easy相关标签:二叉树、DFS、后序遍历、分治、递归| 解法 | 时间复杂度 | 空间复杂度 | 优点 | 缺点 | 适用场景 |

m0_52114506的博客 1042

力扣热题100_二叉树_543_二叉树的直径

力扣热题100_二叉树_543_二叉树的直径

weixin_42504788的博客 379

坚持刷题 | 二叉树的直径

Hello,大家好,我是阿月。坚持话题,老年痴呆追不上我,今天还有时间,那就再来一题吧:二叉树的直径

weixin_44435110的博客 1045

leetcode 543二叉树的直径

【代码】leetcode 543二叉树的直径。

qq_63176310的博客 204

【重点】【二叉树】543. 二叉树的直径

合理利用全局变量, 可以大大简化问题!

Allenlzcoder的博客 294

LeetCode——543. 二叉树的直径

题目描述: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 注意:两结点之间的路径长度是以它们之间边的数目表示。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 代码如下: /** * Definition for a binary

FYPPPP的博客 178

LeetCode 543 二叉树的直径:为什么答案不是树的深度?一文彻底讲透

DFS 后序遍历秒杀:递归算每个节点的左右最大深度,用全局变量记录“左深+右深”的最大值,就是直径。⚠️注意路径不一定过根,别直接返回树高。时间 O(n),空间 O(h)。记住口诀:递归算深度,左右相加记全局

2501_91888992的博客 208

LeetCode高频考点:二叉树直径问题的3种解法全解析(Python/Java/C++)

本文全面解析LeetCode高频考点二叉树直径问题的3种解法,包括基础递归、非递归迭代和面向对象风格实现,并提供Python、Java、C++多语言代码示例。深入讲解路径计算核心逻辑和复杂度分析,帮助开发者掌握算法面试关键技巧,特别适合准备技术面试的工程师学习。

weixin_30415113的博客 531
上一篇: 【二叉树】【DFS】104.二叉树的最大深度
下一篇: 【重点】【二分查找】34. 在排序数组中查找元素的第一个和最后一个位置
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值