当前位置: 首页 > news >正文

一起学习LeetCode热题100道(40/100)

40.二叉树的直径(学习)

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

示例 1:
在这里插入图片描述
输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

示例 2:
输入:root = [1,2]
输出:1

提示:
树中节点数目在范围 [1, 104] 内
-100 <= Node.val <= 100

解析:
1.定义全局变量: 我们需要一个全局变量(或闭包中的变量)来跟踪到目前为止找到的最长路径的长度,即直径。
2.编写DFS函数: 这个函数将递归地遍历二叉树,并返回以当前节点为根的子树的最大深度。同时,在遍历过程中,它会检查并更新全局直径变量。
3.计算深度: 对于每个节点,我们递归地计算其左子树和右子树的最大深度。然后,我们可以通过左子树深度加右子树深度(再减去1,因为路径不应重复计算当前节点)来得到经过当前节点的最长路径长度。我们将这个长度与全局直径进行比较,并更新全局直径(如果需要)。
4.返回深度: 最后,我们返回以当前节点为根的子树的最大深度(即左子树和右子树深度的较大值加1)。
5.启动DFS: 从根节点开始调用DFS函数。
6.返回结果: DFS完成后,全局直径变量将包含二叉树的直径,我们将其返回。

var diameterOfBinaryTree = function(root) {let diameter = 0;  // 辅助函数,返回以当前节点为根的子树的最大深度,并更新全局直径  function dfs(node) {  if (!node) return 0;  // 分别计算左子树和右子树的最大深度  const leftDepth = dfs(node.left);  const rightDepth = dfs(node.right);  // 更新直径  diameter = Math.max(diameter, leftDepth + rightDepth);  // 返回以当前节点为根的子树的最大深度  return Math.max(leftDepth, rightDepth) + 1;  }  dfs(root);  return diameter;  
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LlamaIndex-milvus-RAG
  • 基于vue框架的yit商城uwd1i(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 【产品经理】竞品分析怎么理解?拆解一下
  • 万字干货!手把手教你如何训练超大规模集群下的大语言模型
  • 【STM32嵌入式系统设计与开发拓展】——15_ADC
  • 重修设计模式-行为型-状态模式
  • Java面试八股之什么是消息队列
  • 智慧景区系统:科技赋能旅游新体验
  • 理解 Go 语言的分组操作
  • JAVA中的ArrayDeque和LinkedList实现Deque,前者不能存NULL结点,后者可以存放NULL。
  • 【upload]-ini-[SUCTF 2019]CheckIn-笔记
  • MySQL 中主键索引的页分裂:深入探讨
  • STM32家族系列的区别
  • 使用go实现一个简单的聊天服务器
  • 机器学习/深度学习——梯度下降法(Gradient descent)详解. 步骤清晰 0基础可看
  • CSS相对定位
  • es6--symbol
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Kibana配置logstash,报表一体化
  • nfs客户端进程变D,延伸linux的lock
  • oldjun 检测网站的经验
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 机器学习 vs. 深度学习
  • 人脸识别最新开发经验demo
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我感觉这是史上最牛的防sql注入方法类
  • 一个项目push到多个远程Git仓库
  • C# - 为值类型重定义相等性
  • ​数据结构之初始二叉树(3)
  • #控制台大学课堂点名问题_课堂随机点名
  • (1) caustics\
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (黑马点评)二、短信登录功能实现
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Linux下编译安装log4cxx
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Core中的去虚
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 回调、接口回调、 委托
  • .Net各种迷惑命名解释
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @我的前任是个极品 微博分析
  • [ C++ ] 类和对象( 下 )
  • [000-01-011].第2节:持久层方案的对比
  • [AI Google] Ask Photos: 使用Gemini搜索照片的新方法
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn