力扣543. 二叉树的直径(java DFS解法)

Problem: 543. 二叉树的直径

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

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

思路

本题目要求我们求取二叉树中最长的路径,可将其按递归的思想分解成的最小子问题如下:

1.求取左子树的最长路径
2.求取右子树的最长路径
3.合并求取树的最长路径

解题方法

1.定义成员变量result记录最长“直径”
2.编写递归代码,依次得到左右子树的最长“直径”
3.将左右子树的最长“直径”合并得到当前的最长“直径”,并与result比较更新
4.在归的过程中返回当前左右子树的最长路径加一(因为此时要回退到上一个节点,所以要加一!!!)

复杂度

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( h ) O(h) O(h) h h h为树的高度

Code

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {//Recode the longest diameterprivate int result = 0;/*** Gets the path length between any two nodes of a tree** @param root The root node of a tree* @return int*/public int diameterOfBinaryTree(TreeNode root) {claMaxHeight(root);return result;}/*** Recursively gets the longest path containing the root node** @param root The root node of a tree* @return int*/public int claMaxHeight(TreeNode root) {if (root == null) {return 0;}//Gets the longest path of the left and right subtreeint maxLeftHeight = claMaxHeight(root.left);int maxRightHeight = claMaxHeight(root.right);//Get the longest path("diameter")int diameter = maxLeftHeight + maxRightHeight;//Update the longest path("diameter")if (diameter > result) {result = diameter;}return Math.max(maxLeftHeight, maxRightHeight) + 1;}
}

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

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

相关文章

OGG实现Oracle19C到postgreSQL14的实时同步

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

用户帐户限制(例如,时间限制)会阳止你登录。请与系统管理员或技术支持联系以获取帮助

出现的问题 用户帐户限制(例如,时间限制)会阳止你登录。请与系统管理员或技术支持联系以获取帮助 2.解决方法 使用WINR召唤出运行,然后输入secpol.msc,然后点击回车键,进入本地安全策略,在左边栏中找到本地策略,再…

TextCNN文本分类快速上手

这里写目录标题 TextCNN介绍:Docker从0安装Docker基于镜像安装容器打包操作(生成镜像时使用的命令)安装时命令 页面访问模型训练API访问性能测试其他查看显卡信息 TextCNN介绍: 1.支持语义识别和分类置信度输出。 2.训练速度快&…

在动态时代引领软件领导地位

在职业追求领域,存在一种常见的误解,认为管理软件开发类似于骑自行车——一种静态技能,一旦获得,只需极少的调整就可以平稳地向前推进。然而,在快速发展的技术领域,这种比较不仅过于简单化,而且…

如何设计适合数字化转型需要的数据架构

现代组织需要一个模块化的数据架构来支持复杂的企业环境,同时为业务用户提供数据访问。以下是一些关键考虑因素。 一重视元数据的管理 数据架构不断发展以提供由元数据支持的数据自助服务 过去几十年来,数据分析架构最佳实践已经经历了多个时代&#…

linux服务器环境搭建(使用yum 安装mysql、jdk、redis)

一:yum的安装 1:下载yum安装包并解压 wget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz tar xvf yum-3.2.28.tar.gz 2.进入yum-3.2.28文件夹中进行安装,执行安装指令 cd yum-3.2.28 sudo apt install yum 3.更新版本 yum check-update yum update yum cle…

基于微博的信息热度评价与预测分析

摘 要 微博已成为时下非常热门的社交媒体平台,是一个庞大的关于信息分享和话题交流的平台,在人们线上社交活动中发挥着不可替代的作用,由于网络信息鱼龙混杂,所以本文通过了解微博的热度机制进而研究微博热度和预测微博的热门程度…

WebGL开发数据可视化应用

WebGL 是一种强大的图形渲染技术,用于在浏览器中创建高性能的交互式数据可视化应用。以下是开发这类应用的一般技术方案,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.WebGL 框架&…

CRM实战:如何对商机阶段进行有效管理

对企业来说,管理客户的多个需求对于开发新的商机至关重要。一旦发现客户有多个需求,我们可以在客户信息表中建立相应数量的商机,这样有助于系统化地进行跟进,达到商机利用的最大化。那么,CRM系统如何进行企业的商机阶段…

C语言二叉树的基本概念(一)

目录 二叉树 二叉树的分类(目前只谈两种) 满二叉树 完全二叉树 二叉树的性质(其余的可以自己总结) 选择练习 二叉树的存储结构 顺序存储方式 链式存储方式 二叉树 定义:二叉树是一种特殊的树状数据结构&…

前端漏洞--front(系统有user1/user1,admin1/admin1两个用户)

任务一:挖掘反射型XSS漏洞(以弹窗test13)证明 任务二:复现环境中的CSRF漏洞,设计表单,当管理员点击URL后自动将自己密码重置为:123456 任务三:复现环境中的JSON Hijacking漏洞&#…

电容、电感和电阻

一、电感 1)图片 2)作用 a)储存容量 例如dcdc转换器的原理,将一个电压值转换成另外一个电压值 b)选择信号 比如空气中弥漫着很多信号,我们应该怎么选取我们所需要的信号。 电感和电容可以看成一个电阻,当电…

CRM管理系统:让你的业务运行更流畅

是客户关系管理系统的缩写。现代企业利用网络技术协调企业和客户之间在销售和服务上的对接,提升企业核心竞争力的一种手段。那么CRM管理系统一般包含哪些功能模块呢?今天小编为大家介绍一下。 一、好的CRM管理系统有哪些功能特性 1、有全方位的客户视图…

2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷④

2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷④ 2024年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题卷④A模块基础设施设置/安全加固(本模块200分)A-1任务一 登录安全加固&#xf…

Stable diffusion ai图像生成本地部署教程

前言 本文将用最干最简单的方式告诉你怎么将Stable Diffusion AI图像生成软件部署到你的本地环境 关于Stable Diffusion的实现原理和训练微调请看我其他文章 部署Stable Diffusion主要分为三个部分 下载模型(模型可以认为是被训练好的,生成图像的大脑…

如何有效进行主数据治理

在企业信息化建设不断推进、逐渐进行数字化转型的今天,几乎所有的企业都卷入到数据及其处理(数据收集、存储、检索、传输、分析和表示)的浪潮中,数据已成为重要生产要素和无形资产,针对主数据的全生命周期管理迫在眉睫…

振弦读数模块开发时的要点

振弦读数模块开发时的要点 振弦读数模块是振弦采集仪中重要的组成部分,以下是开发时需要注意的要点: 1. 确定采样频率和精度:振弦采集仪必须以足够高的频率和精度采集振弦信号,以确保数据的准确性和完整性。 2. 选择合适的传感器…

景联文科技解读《2023人工智能基础数据服务产业发展白皮书》,助力解决数据标注挑战

前段时间,国家工业信息安全发展研究中心发布《2023人工智能基础数据服务产业发展白皮书》(以下简称“白皮书”)。 《白皮书》指出,2022年,中国人工智能基础数据服务产业的市场规模为45亿元,预计今年将达到5…

大小堆的实现(C语言)

目录 前言 一种完全二叉树:堆 堆的概念 堆的性质 建堆的时间复杂度 建堆的空间复杂度: 小堆的实现 必要补充 堆的初始化 堆的销毁 向上调整算法 堆的插入 向下调整算法 堆的删除 获取堆顶元素 获取堆中元素个数 堆的判空 最终代码 He…

21款奔驰GLE450升级HUD抬头显示 平视仪表信息

说起HUD抬头显示这个配置,最初是用在战斗机上的,它可以让战斗机驾驶员读取飞机的各种信息和状态,而无需移动头部,这样就能够有效的提高效率。但随着汽车技术的进步HUD这种配置也逐渐下放到民用车上。发展到今,车上的抬…