【LeetCode刷题(数据结构与算法面试题)】:最小高度树

news2024/12/23 4:52:49

在这里插入图片描述
给定一个有序整数数组 元素各不相同且按升序排列 编写一个算法 创建一棵高度最小的二叉搜索树
示例:
给定有序数组: [-10,-3,0,5,9]
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树

      0 
     / \ 
   -3   9 
   /   / 
-10  5 

确定最小高度二叉搜索树的根节点之后,其余的数字分别位于最小高度二叉搜索树的左子树和右子树中,左子树和右子树分别也是最小高度二叉搜索树,因此可以通过递归的方式创建最小高度二叉搜索树
递归的基准情形是最小高度二叉搜索树不包含任何数字,此时最小高度二叉搜索树为空 在给定中序遍历序列数组的情况下,每一个子树中的数字在数组中一定是连续的,因此可以通过数组下标范围确定子树包含的数字,下标范围记为 [left,right]对于整个中序遍历序列,下标范围从 left=0到right=nums.length−1当left>right\textit{left}>\textit{right}left>right 时,最小高度二叉搜索树为空

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

struct TreeNode*MidTreeNode(int*nums,int left,int right)
{
    if(left>right)
    {
        return NULL;//递归的时候会出现left>right的情况 此时会造成stackoverflow栈溢出的问题 数组会越界 所以这里需要判断一下数组是否越界
    }
    //中序遍历:选择midi中间数作为root根节点
    int midi=(left+right)/2;
    struct TreeNode*root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
    root->val=nums[midi];
    root->left=MidTreeNode(nums,left,midi-1);
    root->right=MidTreeNode(nums, midi+1,right);
    return root;
}
struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
    return MidTreeNode(nums,0,numsSize-1);
}

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

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

相关文章

股票价格预测 | Python基于RNN股票预测实战

循环神经网络(RNN)是基于序列数据(如语言、语音、时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为“循环”。它专门用于处理序列数据,如逐字生成文本或预测时间序列数据(例如股票价格)。 (1)one to one:其实和全连接神经网络…

网页版微信客户管理系统,常见疑问解答

1.系统怎么登陆? 请使用谷歌浏览器打开和使用系统,避免出现浏览器不兼容的问题,不建议使用其他浏览器。打开后输入登陆账号和密码即可登陆。 2.怎么登陆微信号? 登陆系统后,点击左上角这个 “” ,选择 “…

性能测试-redis常见问题

缓存击穿、缓存穿透、缓存雪崩 缓存雪崩 解决办法 1.设置缓存失效时间,不要在同一时间 2.redis集群部署 3.不设置缓存设置时间 4.定时刷缓存的时间 缓存穿透 请求不管返回什么数据都返回给redis对参数合法器进行验证,不合法的时候直接过滤掉使用布…

Raiden Network(二)—— Mediated transfers(多跳支付里的中介传输)

什么是Mediated transfers 在雷电网络中,节点可以通过中间节点进行Mediated transfers向其他节点进行支付。Mediated transfers的步骤: Allocation(分配): 使用锁定的转移消息(locked transfer message&am…

建陶行业标杆『诺贝尔瓷砖』企企通供应链协同系统一期项目上线,数字采购领航企业高质量发展

企企通与全球领先的高端装饰材料系统服务商【杭州诺贝尔陶瓷有限公司】(以下简称“诺贝尔瓷砖”)联合开发的供应链协同系统一期项目正式上线,这意味着诺贝尔瓷砖供应链变革管理迈上新的台阶,数字化采购进入新高速时代。 01、高端装…

EM@圆和圆锥曲线的参数方程

文章目录 abstract圆的参数方程匀速圆周运动的轨迹从普通方程直接转化为参数方程 任意位置圆心的方程参数方程一般方程例 交点问题的参数方程法 圆锥曲线的参数方程椭圆参数方程例椭圆内接矩形的最大面积问题 抛物线参数方程一般位置的抛物线例 双曲线的参数方程点到双曲线的最…

一文理解登录鉴权(Cookie、Session、Jwt、CAS、SSO)

1 前言 登录鉴权是任何一个网站都无法绕开的部分,当系统要正式上线前都会要求接入统一登陆系统,一方面能够让网站只允许合法的用户访问,另一方面,当用户在网站上进行操作时也需要识别操作的用户,用作后期的操作审计。…

如何优雅地读取网络的中间特征?

0.前言 在调试深度神经网络工程时,常会在前向计算过程中将网络的中间层信息返回,便于打印或者可视化网络中间结果。实现该功能的一个常用方法是在构建model类时,在forward返回要保留的中间信息。 这里跟大家分享一个更优雅、便捷的方法&…

《软件方法》2023版第1章(10)应用UML的建模工作流-大图

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.4 应用UML的建模工作流 1.4.1 概念 我用类图表示建模工作流相关概念如图1-16。 图1-16 建模工作流相关概念 图1-16左侧灰色部分定义了“游戏规则”,右侧则是在“游戏规…

假如你有一台服务器,你最想做哪些事

假如你有一台服务器,你最想做哪些事 在这个数字化的时代,服务器已经成为了我们生活中不可或缺的一部分。它们为我们提供了无数的便利,让我们的生活变得更加丰富多彩。那么,假如我有一台服务器,我会如何使用它呢&#…

WebDAV之π-Disk派盘 + Xplore

手机文件太多、太乱,本地目录中找不想要的文件,怎么办?推荐使用Xplore将手机中的文件以不同的文件方式罗列出来,并展示给用户。文件管理器以图片、音乐、视频、文档、压缩包及安装包等类型进行分类,使手机中的文件一目了然的分列开。也可以对每个分类下的文件进行不同的操…

视频剪辑软件Corel VideoStudio 会声会影2023新功能介绍及安装激活教程

我很喜欢视频剪辑软件Corel VideoStudio 会声会影2023,因为它使用起来很有趣。它很容易使用,但仍然给你很多功能和力量。视频剪辑软件Corel VideoStudio 会声会影2023让我与世界分享我的想法!“这个产品的功能非常多,我几乎没有触…

二叉树题目:从前序与中序遍历序列构造二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:从前序与中序遍历序列构造二叉树 出处:105. 从前序与中序遍历序列构造二叉树 难度 5 级 题目描述 要…

Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池

动态创建子进程或子线程的缺点: 1.动态创建进程或线程比较耗时,这将导致较慢的客户响应。 2.动态创建的子进程或子线程通常只用来为一个客户服务(除非我们做特殊处理),这将导致系统上产生大量的进程或线程&#xff0c…

基于yolov2深度学习网络的猫脸检测识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [224,224]; imgPath test/; % 图…

哈佛教授因果推断力作:《Causal Inference: What If 》pdf下载

因果推断是一项复杂的科学任务,它依赖于多个来源的三角互证和各种方法论方法的应用,是用于解释分析的强大建模工具,同时也是机器学习领域的热门研究方向之一。 今天我要给大家推荐的这本书,正是因果推断领域必读的入门秘籍&#…

《WebGIS快速开发教程第四版》重磅更新

随着笔者夜以继日的不断忙碌,丰富和完善心血之作《WebGIS快速开发教程》,第四版也终于发布了,第四版相比于前三个版本可以用四个字概括那就是“重磅更新”,重磅两个字该如何理解呢? 首先我们来看看更新了哪些内容&…

【MySQL】如何在Linux上安装MySQL

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 MySQL 一、准备Linux服务器二、下载Linux版…

开源欧拉 openEuler 23.09 创新版本发布

导读近日,openEuler 23.09 创新版本正式发布,是社区最新发布的创新版,使用 EulerMaker 构建该版本的的服务器、云计算、边缘计算镜像,版本代码总计 9.1 亿行,相比 openEuler 23.03,新增代码 8900 万行。 新…

Flutter笔记:发布一个电商中文货币显示插件Money Display

Flutter笔记 电商中文货币显示插件 Money Display 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/1338…