【leetcode】543. 二叉树的直径

二叉树的直径

    • 题目
    • 题解
    • 解释

题目

543. 二叉树的直径

给你一棵二叉树的根节点,返回该树的 直径 。

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。
在这里插入图片描述

题解

思路:找到左边最长和右边最长

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def diameterOfBinaryTree(self, root):""":type root: Optional[TreeNode]:rtype: int"""self.ans = 0def dfs(root):if root is None:return -1l_len = dfs(root.left) + 1r_len = dfs(root.right) + 1self.ans = max(self.ans, l_len + r_len)return max(l_len, r_len)dfs(root)return self.ans   

解释

假设我们有以下的二叉树:

     1/ \2   3/ \  4   5

步骤 1: 初始调用
diameterOfBinaryTree(root) 调用 dfs(root),即传入根节点 1。

步骤 2: 递归计算深度

  • 对节点 1:

    • 左子树:递归调用 dfs(root.left),即节点 2。
  • 对节点 2:

    • 左子树:递归调用 dfs(root.left),即节点 4。

      • 节点 4 是叶子节点,因此返回 0。
    • 右子树:递归调用 dfs(root.right),即节点 5。

      • 节点 5 是叶子节点,因此返回 0。
    • 对节点 2:l_len = 0 + 1 = 1,r_len = 0 + 1 = 1,self.ans = max(0, 1 + 1) = 2,返回 max(1, 1) = 1。

  • 对节点 1:

    • 左子树:返回节点 2 的深度 1。

    • 右子树:递归调用 dfs(root.right),即节点 3。

      • 节点 3 是叶子节点,因此返回 0。
    • 对节点 1:l_len = 1 + 1 = 2,r_len = 0 + 1 = 1,self.ans = max(2, 2 + 1) = 3,返回 max(2, 1) = 2。

步骤 3: 返回结果
最终返回 self.ans = 3,表示二叉树的直径为 3,即从节点 4 到节点 5,通过节点 2 再到节点 1,该路径包含 3 个节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI基础知识(07):基于 PyTorch 的手写体识别案例手册

目录 实验介绍 实验对象 实验时间 实验流程 实验介绍 随着人工智能技术的飞速发展,图像识别技术在众多领域得到了广泛应用。手写体识别作为图像 识别的一个重要分支,其在教育、金融、医疗等领域具有广泛的应用前景。本实验旨在利用深度 学习框架 PyTorc…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

信号(瞬时)频率求解与仿真实践(2)

引言 本文是信号(瞬时)频率求解与仿真实践专题的第二篇文章,在上一篇博文 [1]信号(瞬时)频率求解与仿真实践(1)-CSDN博客中,我构建了信号瞬时频率求解的基本框架,并且比较详细地讨论了瞬时频率法。这篇博文探讨适用于信号瞬时频率求解的另一种…

Linux运行发布jar文件携带哪些参数

在 CentOS 8 上运行发布的 JAR 文件时,可以根据不同需求携带以下参数: 1. 基本运行方式 bash 复制 下载 java -jar your-application.jar 2. 常用 JVM 参数 参数说明-Xms256m初始堆内存大小(如 256MB)-Xmx1024m最大堆内存大小(如 1GB)-XX:MaxMetaspaceSize=256m元空间…

在GIS 工作流中实现数据处理(4)

结果输出与可视化 最后,我们将统计结果输出为一个 Excel 文件,并在 ArcMap 中对城市中心区域的土地利用情况进行可视化展示。 import pandas as pd# 将统计表格转换为 pandas DataFrame df pd.read_csv(statistics_table, sep"\t")# 输出为…

【术语解释】网络安全((SAST, DAST, SCA, IAST),Hadoop, Spark, Hive 的关系

## OWASP Top 10等 OWASP Top 10:OWASP (Open Worldwide Application Security Project,开放全球应用程序安全项目) Top 10 是一份由全球安全专家定期更新的报告,列出了当前 Web 应用程序面临的十大最关键安全风险。 它是一个广受认可的意识文…

NY197NY205美光闪存固态NY218NY226

NY197NY205美光闪存固态NY218NY226 美光科技作为全球领先的半导体存储解决方案供应商,其闪存固态硬盘(SSD)产品线一直备受业界关注。NY197、NY205、NY218和NY226是美光近期推出的几款重要固态硬盘型号,它们在性能、容量和适用场景…

MinHook 对.NET底层的 SendMessage 拦截真实案例反思

一:背景 1. 讲故事 上一篇我们说到了 minhook 的一个简单使用,这一篇给大家分享一个 minhook 在 dump 分析中的实战,先看下面的线程栈。 0:044> ~~[138c]s win32u!NtUserMessageCall0x14: 00007ffc5c891184 c3 ret 0:061&g…

qt配合海康工业相机取图开发

1.最近开发海康工业相机&#xff0c;做取图demo 2.在MVS运行目录下找到Development文件夹&#xff0c;找到下图两个文件夹一个是头文件一个是库文件 3.引用到qt项目中 4.下面是头文件跟源文件 头文件 #ifndef MVSCAMERA_H #define MVSCAMERA_H#include <QObject> #incl…

JavaScript基础学习与应用(后端了解部分)

JavaScript JavaScript原名liveScrip,由美国网景公司开发的一种用于对网页操作的脚本语言 脚本语言:(不需要编译 sql html css)由某种解释器直接解释运行的 JavaScript是一种解释性的脚本语言 JavaScript是网页的行为,可以为网页提供各种行为(图片操作) JavaScript一般一对…

Linux环境下安装和使用RAPIDS平台的cudf和cuml - pip 安装方法

‌ cuDF 和 cuML 是 RAPIDS平台 的两个核心组件&#xff0c;它们共同构成了RAPIDS平台的主要功能 1.linux环境下pip安装 pip install cuml-cu1224.6.0 --extra-index-urlhttps://pypi.nvidia.com 安装过程中可能会提示缺少包之类的&#xff0c;按提示进行包的缺失安装 2.安装…

基于 Redis 的幂等性设计:SpringBoot @Async 在高并发 MySQL 日志存储中的应用

一、问题描述 在高并发场景下,大量设备实时上报状态数据,需要异步保存到MySQL,同时需要解决幂等性校验和线程池耗尽问题。 二、解决方案 1. 幂等性控制 作用:确保同一请求无论执行多少次,结果都一致,避免重复处理。 实现方式: 唯一标识:设备ID + 时间戳组合Redis原…

ELK日志采集系统

ELK 日志采集系统指的是由 Elasticsearch、Logstash 和 Kibana 三个核心开源软件组成的套件&#xff0c;用于集中式日志的采集、处理、存储、搜索、分析和可视化。它现在更常被称为 Elastic Stack&#xff0c;因为其组件生态已经扩展&#xff08;尤其是引入了 Beats&#xff09…

什么是音频?

引言&#xff1a;声音的本质 什么是音频&#xff1f;振动与感知 音频&#xff0c;在其最核心的层面&#xff0c;即是我们通常所说的声音。它起源于物体的振动。这些振动扰动了其周围的介质&#xff08;例如空气或水&#xff09;&#xff0c;在介质中产生了微小的压力变化&…

接口 RESTful 中的超媒体:REST 架构的灵魂驱动

在 RESTful 架构中&#xff0c;** 超媒体&#xff08;Hypermedia&#xff09;** 是一个核心概念&#xff0c;它体现了 REST 的 “表述性状态转移&#xff08;Representational State Transfer&#xff09;” 的本质&#xff0c;也是区分 “真 RESTful API” 与 “伪 RESTful AP…

centos clamav 扫描及告警配置

centos clamav 扫描及告警配置 1 下载1.1官网下载1.2 在线下载2 配置3 扫描3.1 更新病毒库3.2 扫描4 告警4.1 安装 Postfix4.2 安装mail邮件工具4.3 配置4.4 发送告警邮箱信息5 定时配置(cronie)5.1 定时更新病毒库5.2 定时扫描1 下载 1.1官网下载 官网下载地址,下载rpm包…

华为WLAN概述知识点及案例试题

目录 &#x1f4d8; 华为WLAN概述知识点及案例总结✅ 一、WLAN技术背景&#x1f4cc; 为什么需要WLAN&#xff1f;&#x1f4cc; 应用趋势&#xff1a; ✅ 二、WLAN基本概念&#x1f4cc; WLAN定义&#x1f4cb; IEEE 802.11与Wi-Fi标准演进&#x1f4cb; 发展趋势&#xff08;…

MultiTalk 是一种音频驱动的多人对话视频生成模型

TL;DR&#xff1a;MultiTalk 是一种音频驱动的多人对话视频生成。它支持多人对话&#x1f4ac;、唱&#x1f3a4;歌、交互控制和&#x1f46c;卡通&#x1f64a;的视频创建。 视频演示 001.mp4 004.mp4 003.mp4 002.mp4 005.mp4 006.mp4 003.mp4 002.mp4…

实现无缝连接:EtherNet/IP转CANopen网关助力汽车制造智能化未来

在如今这个高度自动化的汽车制造行业&#xff0c;设备之间的互操作性变得越来越重要&#xff0c;在一条自动化装配线上&#xff0c;贝加莱的PLC和CANopen伺服驱动器以及通过EtherNet/IP转CANopen网关&#xff08;稳联技术的WL-EIP-COP&#xff09;紧密合作&#xff0c;带来了精…

音视频之H.264的句法和语义

系列文章&#xff1a; 1、音视频之视频压缩技术及数字视频综述 2、音视频之视频压缩编码的基本原理 3、音视频之H.264/AVC编码器原理 4、音视频之H.264的句法和语义 在编码器输出的码流中&#xff0c;数据的基本单位是句法元素。每个句法元素由若干比特组成&#xff0c;它表…