【LeetCode热题100】108. 将有序数组转换为二叉搜索树(二叉树)

一.题目要求

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

二.题目难度

简单

三.输入样例

示例 1:
在这里插入图片描述
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
在这里插入图片描述

示例 2:
在这里插入图片描述
输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

提示:
1 < = n u m s . l e n g t h < = 1 0 4 1 <= nums.length <= 10^4 1<=nums.length<=104
− 1 0 4 < = n u m s [ i ] < = 1 0 4 -10^4 <= nums[i] <= 10^4 104<=nums[i]<=104
n u m s nums nums 按 严格递增 顺序排列

四.解题思路

升序其实给提示了
在这里插入图片描述
BST 的中序遍历是升序的,因此本题等同于根据中序遍历的序列恢复二叉搜索树。因此我们可以以升序序列中的任一个元素作为根节点,以该元素左边的升序序列构建左子树,以该元素右边的升序序列构建右子树,这样得到的树就是一棵二叉搜索树

复习:平衡二叉树的构建 https://blog.csdn.net/qq_63691275/article/details/128789641

五.代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {     

            return findNext(nums, 0, nums.size() - 1);
    }

    TreeNode* findNext(vector<int>& nums, int left, int right)
    {
        if(left > right) return nullptr;
        TreeNode* t = new TreeNode(nums[(left + right) / 2]);
        t->left = findNext(nums, left, (left + right) / 2 - 1 );
        t->right = findNext(nums, (left + right) / 2 + 1, right);
        return t;
    }
};

            //四种不平衡情况
            //LL
            // if(head->left && head->left->left)
            // {
            //     TreeNode* tmp = head->left;
            //     head->left->right = head;
            //     head->left = nullptr;
            //     head = tmp;
            // }
            // else if(head->right && head->right->right)
            // {
            //     TreeNode* tmp = head->right;
            //     head->right->left = head;
            //     head->right = nullptr;
            //     head = tmp;
            // }
            // else if(head->left && head->left->right)
            // {
            //     TreeNode* tmp = head->left->right;
            //     head->left->right->left = head->left;
            //     head->left->right->right = head->right;
            //     head->left->right = nullptr;
            //     head->left = nullptr;
            //     head = tmp;
            // }
            // else if(head->right && head->right->left)
            // {
            //     TreeNode* tmp = head->right->left;
            //     head->right->left->right = head->right;
            //     head->right->left->left = head->left;
            //     head->right->left = nullptr;
            //     head->right = nullptr;
            //     head = tmp;
            // }
      


    

六.题目总结

这特么是简单?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React Native 应用打包上架

引言 在将React Native应用上架至App Store时&#xff0c;除了通常的上架流程外&#xff0c;还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…

【目标检测】西红柿成熟度数据集三类标签原始数据集280张

文末有分享链接 标签名称names: - unripe - semi-ripe - fully-ripe D00399-西红柿成熟度数据集三类标签原始数据集280张

Spring文件配置以及获取

前言 我们都知道很多应用都是有配置文件的,可以对应用的一些参数进行配置,如conf... 本篇我们讲解关于Spring的配置文件以及程序怎么获取其中写入的参数 Spring中的配置文件主要有三种 还有yml和ymal文件 下面我们将介绍关于常用的两种 preoperties 和 yml文件的格式和读取…

【SQL】1667. 修复表中的名字(UPPER()、LOWER()、SUBSTRING()、CONCAT())

前述 SQL中字符串截取函数(SUBSTRING) SQL 字母大小写转换函数UPPER()、UCASE()、LOWER()和LCASE() 题目描述 leetcode题目&#xff1a;1667. 修复表中的名字 Code select user_id, concat(upper(substring(name, 1, 1)),lower(substring(name, 2)) ) as name from Users o…

5G双域专网+零信任的神奇魔法

引言 在当今数字化程度不断提升的社会中&#xff0c;信息安全已经成为企业和组织发展的关键要素之一。特别是在网络连接日益广泛的环境下&#xff0c;对于数据的保护和隐私的维护变得尤为重要。随着5G技术的飞速发展&#xff0c;5G双域专网为企业提供了更快速、更可靠的连接&a…

对标开源3D建模软件blender,基于web提供元宇宙3D建模能力的dtns.network德塔世界是否更胜一筹?

对标开源3D建模软件blender&#xff0c;基于web提供元宇宙3D建模能力的dtns.network德塔世界是否更胜一筹&#xff1f; blender是一款优秀的3D建模开源软件&#xff0c;拥有免费开源、功能强大、渲染速度优秀的优点。而开源的dtns.network德塔世界&#xff0c;亦是专业级的元宇…

cinder学习小结

1 官方文档 翻译官方文档学习 链接Cinder Administration — cinder 22.1.0.dev97 documentation (openstack.org) 1.1 镜像压缩加速 在cinder.conf配allow_compression_on_image_upload True可打开开关 compression_format xxx可设置镜像压缩格式&#xff0c;可为gzip 1.2 …

【MATLAB源码-第11期】基于matlab的2FSK的误码率BER仿真以及原信号调制信号解调信号波形展示。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 2FSK&#xff08;Frequency Shift Keying&#xff09;为二进制数字频率调制&#xff08;二进制频移键控&#xff09;&#xff0c;用载波的频率来传送数字信息&#xff0c;即用所传送的数字信息控制载波的频率。2FSK信号便是符…

vulnhub-----pWnOS1.0靶机

文章目录 1.信息收集2.漏洞测试3.爆破hash4.提权 首先拿到一台靶机&#xff0c;就需要知道靶机的各种信息&#xff08;IP地址&#xff0c;开放端口&#xff0c;有哪些目录&#xff0c;什么框架&#xff0c;cms是什么&#xff0c;网页有什么常见的漏洞&#xff0c;如sql注入&…

如何添加随机种子保证代码每次复现的一致性?

如何添加随机种子保证代码每次复现的一致性&#xff1f; 在main()程序中首先设定随机种子&#xff1a; def set_seed(seed42):os.environ[PYTHONHASHSEED] str(seed)random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.backends…

【文本挖掘与文本分析】上机实验三

实验目的和要求 实验 了解sklearn,gensim可视化主题的基本操作&#xff1b;采集四大名著之《红楼梦》进行主题分析对《红楼梦》的主题进行可视化 或采集二十大报告进行主题分析&#xff1b;对《二十大报告》的主题进行可视化 数据来源 《红楼梦》小说《二十大报告》 采集红…

ubuntu下安装minconda

1.搜索清华源 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.搜索conda 3.选一个合适自己的下载到本地 4.将下载的文件传入到ubuntu中 bash Miniconda3-py311_23.11.0-1-Linux-x86_64.sh 安装 5.source ~/.bashrc 激活即可&#xff08;必要步骤&#xff09;

2024年 导出环境依赖requirements.txt

2024年 导出环境依赖 一、前言 有时候需要导出环境依赖&#xff0c;遂记录一下这个短短的步骤 二、具体步骤 1、使用pip进行安装和管理环境 安装导出依赖的库pipreqs pip install pipreqs将环境依赖项导出到当前目录的requirements.txt文件&#xff0c;编码格式用utf-8 …

第15篇:2位数值比较器

Q&#xff1a;本篇我们将实现2位二进制数值比较器逻辑电路&#xff0c;即对2个2位二进制数大小进行比较。 A&#xff1a;数值比较器的基本原理&#xff1a;先对两个数的高位进行比较&#xff0c;若高位相等&#xff0c;再比较低位&#xff0c;低位的比较结果决定两个数的大小。…

自增不再简单:深入探索MySQL自增ID的持久化之道

概述 MySQL中的自增特性估计大家或多或少都是用过。一张表中只能由一个自增字段&#xff0c;通常我们会把它设置为主键&#xff0c;但是随着大家系统越来越分布式&#xff0c;为了一些性能和可扩展性问题&#xff0c;大家目前选择更多的都是分布式ID&#xff08;雪花算法、UUI…

自觉性的力量:在无人监督中追求卓越

一、引言 自觉性&#xff0c;这个看似简单的词汇&#xff0c;却蕴含着巨大的力量。它如同内心的指南针&#xff0c;指引我们在无人监督的情况下&#xff0c;依然能够坚守原则&#xff0c;保持积极向上的态度。在快节奏的现代生活中&#xff0c;自觉性更是成为我们应对挑战、实现…

不可变和可变字符序列使用陷阱

String 使用的陷阱&#xff1a; String 一经初始化后&#xff0c;就不会再改变其内容了。对 String 字符串的操作实际上是对其副本&#xff08;原始拷贝&#xff09;的操作&#xff0c;原来的字符串一点都没有改变。比如&#xff1a; String s "a"; 创建了一个字符…

【创建QT项目】使用向导创建

打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application&#xff0c; 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xff0c;按照向导进行下一步&#x…

小吉、鲸立、希亦婴儿洗衣机哪个好用?最强机型pk对比!

宝宝衣服的清洗对父母来说都很重要&#xff0c;所以挑选一款适合宝宝的小型洗衣机显得尤为重要。也许有许多人认为&#xff0c;为婴儿购买独立的洗衣机是不必要的&#xff0c;但是你是否了解呢&#xff1f;新生婴儿的肌肤要比成人更脆弱&#xff0c;更易受到感染而受到伤害&…

Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理

附件下载 联系工作人员获取附件 这篇文章会说明如何在 MATLAB 或 Python 中以 Zemax OpticStudio 应用程式介面 (ZOS-API)处理光线数据库(Ray Database, ZRD)档案&#xff0c;过程中我们将使用ZRDLoader.dll。本文提供了在 Matlab 中批次处理序列光线追迹(一般、归一化、偏振…
最新文章