LeetCode 543.二叉树的直径

Java实现 LeetCode 543 二叉树的直径 543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 PS: 二叉树的直径不一定过根节点,因此需要去搜一遍... 阅读详情
543.二叉树的直径

在这里插入图片描述

思路:

综合前面几个二叉树的问题求解方法,最先考虑的就是递归思想。

因为考虑其解决的问题是否可以转换成子问题。

该题目需要求的是二叉树的直径,也就是相距最远的两个节点的距离。

分析得知道,任意一条最远路径都可视为由某个节点为起点,从其左节点和右节点向下遍历的同样的路径拼接而成。

即直径为:左子树的最长路径、右子树的最长路径、经过该节点的最长路径,三者中最大的一个。

经过该节点的最长路径:左子树的深度+右子树的深度

  • 复杂度
    • 时间复杂度:O(n)
    • 空间复杂度:最差O(n),最优O(log(n)),最差是全为左/右子树,最优是完全平衡二叉树
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int diameter;
    
    public int diameterOfBinaryTree(TreeNode root) {
        diameter = 0;
        getMaxDepth(root);
        return diameter;
    }

    public int getMaxDepth(TreeNode node) {
        if (node == null) {
            return 0;
        }
        int left = getMaxDepth(node.left);
        int right = getMaxDepth(node.right);

        diameter = Math.max(diameter, left + right);
        return 1 + Math.max(left, right);
    }
}

在这里插入图片描述

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

相关推荐

力扣543:二叉树的直径【C++】

题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 分析 这道题的难度在LeetCode上被归为简单,但我觉得这道题无论是思路上还是代码的写法上,还有具有中等难度的程度的。 这道题要求我们计算直径长度,首先我们要将求直径长度转换成一个好求的量,笔者将求直径长度转换为求二叉树的高度。这个其实是不难理解的,因为直径其实就是经过边的个数,每经过一条边,相当于高度增加1。 但是题中说明了这条路径可能穿过根结点,因此最长的路径显然是

The Gao的博客 648

543.力扣LeetCode_二叉树的直径

本文介绍了两种计算二叉树直径的算法。方法1采用前序遍历枚举节点,通过递归计算每个节点的左右子树深度之和来更新最大路径长度,时间复杂度较高。方法2优化为后序遍历,在递归计算子树深度的同时,实时更新全局最长路径,只需一次遍历即可完成计算,时间复杂度为O(n)。两种方法都利用了“路径长度等于左右子树深度之和”这一关键性质,但方法2通过深度优先搜索的递归特性,实现了更高效的计算。

2401_82472941的博客 483

PythonOCC基础使用:建模——倒角倒圆(二维+三维)

占坑

weixin_42755384的博客 4639

leetCode543 二叉树的直径

leetCode543 二叉树的直径 从根节点开始遍历,依次找到左子树的最大路径和右子树的最大路径。树的直径则为左子树最大路径和右子树最大路径之和。 public class leetCode543 { int distance = 0; public int diameterOfBinaryTree(TreeNode root) { if (root ==...

m0_38123034的博客 472

手把手教你用BQ Studio给BQ40Z50电量计“做体检”:从Golden Learning到精度验证的全流程实操

本文详细介绍了如何使用BQ Studio对BQ40Z50电量计进行全流程调试,从Golden Learning到精度验证。通过硬件连接、参数配置和优化技巧,帮助工程师提升电池管理系统的精度和性能,适用于BMS开发和电量计校准的实际应用场景。

weixin_30824599的博客 452

【WPF】渲染失败甚至程序崩溃,D3DImage.Lock卡死,报COMException异常和UCEERR_RENDERTHREADFAILURE消息

最近遇到WPF程序抛出ystem.Runtime.InteropServices.COMException异常,异常消息UCEERR_RENDERTHREADFAILURE (Exception from HRESULT: 0x88980406),或者先在D3DImage.Lock卡死,然后再出异常的问题。 现象和复现方法 出现了标题中的现象,你很可能有至少两个屏幕,并且可能在你的程序中直接或间接用了如下的库或技术: 1、WpfD3D这个开源库 2、自行使用了WPF中的D3DImage类,实现D3D

几罗星人的专栏 8254

Leetcode 543. 二叉树的直径

Leetcode 543. 二叉树的直径1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/   本质上就是一个二叉树的遍历问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #incl

珍惜 8841

RTOS与Linux功能差异与应用场景全面对比

在嵌入式系统的开发中,操作系统的选择至关重要。和是两种广泛应用的操作系统,它们在功能、设计目标以及应用领域中各具优势。随着嵌入式系统的不断发展,已成为嵌入式行业的大趋势。那么,这两者到底有什么不同呢?

硬核科技 403

《LeetCode力扣练习》第543题 二叉树的直径 Java

《LeetCode力扣练习》第543题 二叉树的直径 Java 一、资源 题目: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 来源:力扣(LeetCode) 链

XRT_knives的博客 232

深度学习-155-RAG技术之嵌入模型Embedding怎么选

Embedding技术在大型语言模型中发挥着至关重要的作用。它将文本转化为向量,使模型能够理解和处理复杂的语言信息。通过选择合适的Embedding方法和优化文本匹配策略,我们可以在搜索引擎、问答系统、推荐系统等领域实现高效且精准的文本匹配。

qq_20466211的博客 406

PyTorch生成式人工智能——VQ-VAE详解与实现

VQ-VAE (Vector Quantised-Variational AutoEncoder) 的核心思想就是将 VAE 的连续潜变量离散化。它通过学习一个码本 (Codebook) 来实现这一点,码本是一个包含有限个嵌入向量的字典。模型不是直接输出一个连续的潜在向量,而是从码本中找出与编码器输出最接近的嵌入向量来代替它。本节首先详细讲解 VQ-VAE 的技术原理,然后使用 PyTorch 从零开始实现 VQ-VAE 模型。

盼小辉丶的博客 3363

【leetcode】543. 二叉树的直径

对节点 2:l_len = 0 + 1 = 1,r_len = 0 + 1 = 1,self.ans = max(0, 1 + 1) = 2,返回 max(1, 1) = 1。对节点 1:l_len = 1 + 1 = 2,r_len = 0 + 1 = 1,self.ans = max(2, 2 + 1) = 3,返回 max(2, 1) = 2。最终返回 self.ans = 3,表示二叉树的直径为 3,即从节点 4 到节点 5,通过节点 2 再到节点 1,该路径包含 3 个节点。

qq_38473254的博客 1078

软件设计师考试下午题代码部分详解:23种设计模式全面解析

软件设计师考试的下午题通常会考察设计模式的应用,这部分内容既是重点也是难点。本文将系统地介绍考试中常见的23种设计模式,通过详细代码示例和通俗易懂的讲解,帮助考生掌握这些核心知识点,提高应试能力。概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用场景:系统要独立于产品的创建、组合和表示时;系统要由多个产品系列中的一个来配置时。@Override@Override@Override@Override// 产品族A@Override。

4万+

leetcode-543 二叉树的直径

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

IT荻的博客 785

Vue3 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue3,nuxt3,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue3对接海康监控设备,无法连接,报错,vue3对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue3,海康,vue海康视频监控,

🏆 前端领域优质创作者 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

求二叉树上结点的路径_LeetCode 力扣官方题解 | 543. 二叉树的直径

力扣 543.二叉树的直径(点击查看题目)力扣​leetcode-cn.com题目描述给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。​示例:给定二叉树 1 / 2 3 / 4 5返回 3, 它的长度是路径 [4,2,...

weixin_39791152的博客 264

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

#力扣 LeetCode543. 二叉树的直径 #在所有 Java 提交中击败了 100.00% 的用户 @FDDLC

题目描述: 543. 二叉树的直径 - 力扣(LeetCode) (leetcode-cn.com) Java代码一: class Solution { public int getTreeHeight(TreeNode root){ if(root==null)return 0; return Integer.max(getTreeHeight(root.left),getTreeHeight(root.right))+1; } pub.

LiuXingchang的博客 369

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LeetCode 543. 二叉树的直径 | C++语言版

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

weixin_45992021的博客 531

leetcode 543. 二叉树的直径

leetcode 543. 二叉树的直径 题目详情 题目链接 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例: 给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 我的代码 #include <vector> ...

qq_33789406的博客 119

【LeetCode 热题 100】543. 二叉树的直径——DFS

Problem:题目:给你一棵二叉树的根节点,返回该树的 直径。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。这条路径可能经过也可能不经过根节点 root。两节点之间路径的 长度 由它们之间边数表示。

最短的捷径就是绕远路,绕远路才是我的最短捷径。 2182

精选力扣500题 第50题 LeetCode 543. 二叉树的直径【c++详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意: 两结点之间的路径长度是以它们之间边的数目表示。 2、思路 (递归,树的遍历) O(n)O(n)O(n) 在这

林深不见鹿 的博客 737

LeetCode 543 二叉树的直径

LeetCode 543 二叉树的直径

2302_79444883的博客 831

leetcode-543-二叉树的直径-java

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

今天吃了吗的博客 341

力扣刷题之543题-二叉树的直径

本文介绍了解决二叉树直径问题的核心思路。关键点在于理解最长路径可能不经过根节点,而是以某个节点为"拐点",通过其左右子树的最深路径组成。文章提供了两种递归解法:一种基于节点数计算高度(depth(null)=0),另一种直接计算边数(depth(null)=-1)。重点分析了递归函数返回值的含义,解释了为什么leftDepth + rightDepth能正确计算路径长度。推荐使用显式边数的写法(depth(null)=-1)以增强代码可读性。通过示例详细说明了递归过程,帮助读者掌握这一经

2401_87778289的博客 1106

Leetcode 543 二叉树的直径 (二叉树的理解和操作)

Leetcode 543 二叉树的直径 题目难度依然是简单。 我们已经知道了二叉树的高度(最近的叶节点),二叉树的深度(最远的叶节点),这次又接触到了二叉树的直径。 首先思考什么是二叉树的直径,如果经过根节点的话,就一定是左子树的深度+右子树深度。如果不经过根节点,那就是左右两侧子树的最大直径。进而实现递归。 应当注意,在计算root的直径时,需要首先知道左右子树的直径和深度。 class Sol...

遍地跑小鸡的博客 212

543. 二叉树的直径 - 力扣(LeetCode)

这里的路径长度是指路径上边的数量,而不是节点的数量。这道题的思想是利用深度优先搜索(DFS)递归地计算每个节点的最大链长,并在递归过程中更新全局变量。,记录当前找到的最长路径长度。这条路径可能经过也可能不经过根节点。是指树中任意两个节点之间最长路径的。给你一棵二叉树的根节点,返回该树的。就是二叉树的直径长度。由它们之间边数表示。​ 二叉树的直径是指。

q1111111da的博客 514
上一篇: LeetCode 409.最长回文串
下一篇: LeetCode 836.矩形重叠
wxianyou
博客等级 码龄9年 1粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值