算法-二叉树-简单-二叉树的直径、将有序数组转换成二叉搜索树

记录一下算法题的学习9

二叉树的直径

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

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

读完题目,我们很容易联系到我们做过的二叉树的最大深度

算法-二叉树-简单-二叉树的最大和最小深度-CSDN博客

举例视图,便于观察

 由图可知:我们现在先求左子树的最大深度(加上根节点),即[6,4,3,2]----->4,而右子树的最大深度(加上根节点)为[6,9,10]or[6,9,8]---->3,但是这是最大深度是最多节点数,直径是树中任意两个节点之间最长路径的长度,即2和10 或者 2和8之间的连线边数,所以是右子树的最大深度+左子树的最大深度-2得到最长路径

 

这张图就是左子树深度[6,4,3,2]-->4,右子树深度[6]-->1(这是算上了根节点),右子树的最大深度+左子树的最大深度-2得到最长路径 即3

 深度优先搜索代码展示:

//这道题很容易联想到二叉树的最大深度这道题目,我们现在就需要求二叉树的最大深度,在去求直径
class Solution {int ans=0;public int maxDepth(TreeNode node) {//访问到空节点,返回0if(node==null){return 0;}int leftDepth=maxDepth(node.left)+1; //得到根节点root左子树的最长路径上的节点数int rightDepth=maxDepth(node.right)+1;//得到根节点root右子树的最长路径上的节点数ans=Math.max(ans,leftDepth+rightDepth-2);//这里的思考关键: 二叉树的直径就是左子树的最多节点数+右子树上的最多节点数-2return Math.max(leftDepth,rightDepth);}public int diameterOfBinaryTree(TreeNode root) {maxDepth(root);return ans;//最长路径
}}

将有序数组转换成二叉搜索树

题目:

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。  

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

 题目分析:根据数组 元素升序排列,我们可以想到二叉树的中序遍历顺序是左根右

举例nums[-10,-3,0,5,9]

nums-10-3059
index01234

选择中间位置左边的数字作为根节点(0+4)/2=2 j即0作为根节点root

0的左孩子是root.left=balance(nums,0,1)即-3,

balance(nums,0,0)即-10,balance(nums,0,-1)即null

0的右孩子是root.right=balance(nums,3,4)即5,

balance(nums,4,4)即9,balance(nums,5,4)即null

题目答案这张图也是符合正确的(但是我没想明白,感谢指正)

 

代码展示: 

class Solution {public TreeNode balance(int[] nums, int left, int right) {//如果左边值大于右边值返回nullif (left > right) {return null;}//如果数组元素是奇数,根节点的选择是唯一的//如果数组元素是偶数,选择中间位置左边的数字作为根节点int mid = (left + right) / 2;//如果数组元素是偶数 选择中间位置右边的数字作为根节点// int mid = (left + right + 1) / 2;TreeNode root = new TreeNode(nums[mid]);//根节点出现root.left = balance(nums, left, mid - 1);//获取根节点左孩子root.right = balance(nums, mid + 1, right);//获取根节点右孩子return root;}public TreeNode sortedArrayToBST(int[] nums) {//这里先初始数组,获取数组元素的第一个索引和最后一个元素的索引return balance(nums,0,nums.length-1);}
}

结束拜拜!

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

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

相关文章

2014年3月24日 Go生态洞察:Go地鼠的故事

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

PRD学习

产品经理零基础入门(五)产品需求文档PRD(全16集)_哔哩哔哩_bilibili 1. PRD的2种表现形式 ① RP格式 (1)全局说明 ② 文档格式

redis之主从复制和哨兵模式

(一)redis的性能管理 1、redis的数据缓存在内存中 2、查看redis的性能:info memory(重点) used_memory:904192(单位字节) redis中数据占用的内存 used_memory_rss:10522624 redis向操作系统…

广告行业中那些趣事系列66:使用chatgpt类LLM标注数据并蒸馏到生产小模型

导读:本文是“数据拾光者”专栏的第六十六篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要介绍使用chatgpt类LLM进行数据标注任务并蒸馏到生产小模型,对于希望使用chatgpt类LLM进行打标并部署到生产任务中的小伙伴可…

JVM的垃圾收集算法

1.算法的分类 1.1标记清除算法 第一步:标记(找出内存中需要回收的对象,并且把它们标记出来) 根据可达性算法,标记的是存活的对象,然后将其他的空间进行回收 第二步:清除(清除掉被…

Sentinel 监控数据持久化(mysql)

Sentinel 实时监控仅存储 5 分钟以内的数据,如果需要持久化,需要通过调用实时监控接口来定制,即自行扩展实现 MetricsRepository 接口(修改 控制台源码)。 本文通过使用Mysql持久化监控数据。 1.构建存储表&#xff08…

ESP32 Arduino实战Web篇-使用 WebSocket 创建 ESP32 Web 服务器

本文将详细介绍如何使用 WebSocket 创建 ESP32 Web 服务器,解释WebSocket原理与搭建步骤,并附超详细的代码解释 假设我们需要创建一个使用 ESP32 通过 WiFi 控制灯泡的项目。实现非常简单:我们将 ESP32 设置为软 AP 或 STA 模式,使其能够提供一个网页,显示灯开关的状态为…

HT560 30W 过温限幅 D类音频功率放大器

HT560具有过温限幅功能,当芯片内部温度达到过温限幅点,HT560自动降低增益,使其IC能够连续播放而不间断。另外,HT560具有功率限制功能,一种是限幅功能,在输出端限制一定的输出幅度,使其不损坏喇叭…

阿里云高效计划学生和老师免费代金券申请认证方法

阿里云高校计划学生和教师均可参与,完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣,适用于云服务器等全量公共云产品,订单原价金额封顶5000元/年,阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

2014年3月13日 Go生态洞察:并发模式与管道取消技术

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

刷题学习记录(攻防世界)

wife_wife 一拿到题目就提示这题不用爆破 进入环境得到的是一个登录框 随便试了一下登录账户密码会提示错误,那就去注册账户,注册的账户还有注册管理员的选项 先注册普通用户234,注册好后登录 这样就得到flag,但是提交是错误的&a…

KT404A语音芯片U盘更新语音方案说明_通讯协议 硬件设计参考

一、功能简介 KT404A语音芯片用U盘更换语音文件,适用于广告机、提示器等等场景 为了满足客户不方便使用PC电脑端更新,我们在KT404A芯片的基础上,开发了U盘更换声音文件的功能,保持和之前的标准本本【也就是KT404A芯片的基础版本…

论文笔记:Localizing Cell Towers fromCrowdsourced Measurements (intro 部分)

2015 1 Intro 1.1 motivation opensignal.com 、cellmapper.net 和 opencellid.org 都是提供天线(antenna)位置的网站 他们提供的天线位置相当准确,但至少在大多数情况下不完全正确这个目标难以实现的原因是蜂窝网络供应商没有义务提供有…

[原创]解决老款AMD CPU在Win10/Win11无故重启的问题.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse、C Bui…

python 实现银行卡号查询银行名称和简称

本章教程利用python实现查询银行卡号名称和简称 。 目录 一、 实例代码 二、运行效果 一、 实例代码 #!/usr/bin/python # -*- coding: UTF-8 -*- """ author: Roc-xb desc: python 实现银行卡号查询银行简称 """ import requestsdef bank_mes…

Vue2 基本语法

Vue2 基本语法 前言Vue2 基本语法脚手架文件结构关于不同版本的Vuevue.config.js配置文件ref属性props配置项mixin(混入)插件scoped样式总结TodoList案例webStorage组件的自定义事件全局事件总线(GlobalEventBus)消息订阅与发布(pubsub&#…

【OpenGauss 列存储学习总结 2】

OpenGauss 列存储学习总结 2 概述文章链接 概述 列存储是一种优化技术,用于在数据库系统中存储和查询大量数据。与传统的行存储方式不同,列存储将每个列的数据分别存储在独立的存储单元中,而不是按照行的方式存储。这种存储方式在分析性查询、…

FFmpeg 6.1 开放源码多媒体框架近日发布了重大更新

导读FFmpeg 6.1 开放源码多媒体框架近日发布了重大更新,带来了新功能、新解码器、新过滤器和许多其他变化。 在 FFmpeg 6.0 “Von Neumann “版本发布八个多月后,FFmpeg 6.1 被命名为 “Heaviside”,引入了多线程 Vulkan 硬件加速解码&#x…

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测

时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测 目录 时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机时间序列预测 1.data为数据集…

2023年中国合成云母行业现状及市场格局分析[图]

合成云母是一种通过化工原料经高温熔融冷却析晶而制得的单斜晶系矿物,属于典型的层状硅酸盐,许多性能都优于天然云母,如合成云母的耐温高达1200℃以上,而天然白云母在550℃下就会开始分解,金云母则在800℃开始分解。除…