LeetCode刷题系列 -- 1008. 前序遍历构造二叉搜索树

news2025/1/10 11:20:38

给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。

保证 对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。

二叉搜索树 是一棵二叉树,其中每个节点, Node.left 的任何后代的值 严格小于 Node.val , Node.right 的任何后代的值 严格大于 Node.val

二叉树的 前序遍历 首先显示节点的值,然后遍历Node.left,最后遍历Node.right

示例 1:

输入:preorder = [8,5,1,7,10,12]

输出:[8,5,10,1,7,null,12]

示例 2:

输入: preorder = [1,3]

输出: [1,null,3]

提示:

  • 1 <= preorder.length <= 100

  • 1 <= preorder[i] <= 10^8

  • preorder 中的值 互不相同

https://leetcode.cn/problems/construct-binary-search-tree-from-preorder-traversal/description/?show=1

思路

用递归的方式构建,定义 left 与 right ,分别为某个子树在 preorder 中的最左边与最右边的下标。
先建立 根节点 preorder[ left ] ,再去寻找左子树与右子树的交界处。
那么如何寻找左子树与右子树的交界处?
因为是二叉搜索树,所以所有的左子树均小于preorder[ left ] ,所有的右子树 均大于preorder[ left ]

c++

/**
 * 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* bstFromPreorder(vector<int>& preorder) {
        return buildSearchTree(preorder,0,preorder.size() - 1);
    }

    TreeNode* buildSearchTree(vector<int>& preorder, int left , int right) {
        if(left>right) {
            return nullptr;
        }
        TreeNode* root = new TreeNode(preorder[left]);
        if(left == right) {
            return root;
        }
        int index = left+1;

        while(index<=right && preorder[index]<preorder[left]) {
            index++;
        }

        root->left = buildSearchTree(preorder,left+1,index-1);
        root->right = buildSearchTree(preorder,index,right);
        return root;
    }

};

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

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

相关文章

JVM的理解(垃圾回收算法和类加载过程)

文章目录1、JVM的位置2、JVM的体系结构3、JVM组件3.1、类加载器&#xff08;加载class文件&#xff09;3.1.1、类加载器的执行步骤3.2、PC寄存器3.3、方法区3.4、栈3.5、堆4、GC算法4.1、引用计数法4.2、复制算法1、模型2、原理图4.3、标记清除4.4、标记压缩总结&#xff1a;1、…

2023年了学Java还能找到工作么?

Java人才需求缺口巨大 为何还有人找不到工作&#xff1f; 近两年&#xff0c;传统企业开始数字化转型&#xff0c;各企业对互联网IT技术人才呈现井喷趋势。对于进可攻前端、后可守后端的Java程序员而言&#xff0c;市场对他们青睐有加&#xff0c;薪资更是水涨船高。然而在…

Cesium 本地化部署和新增sandcastle案例

源码下载git clone https://gitee.com/mirrors-gis/cesium.gitcd cesium npm install // or yarn install构建 因为下载的源码,还没有构建出cesium的api,以及api对应的文档 ,如果此时直接运行 npm start ,会启动一个8080端口的一个服务,通过 http://localhost:8080 可以看…

SpringCloud Alibaba_Nacos服务注册和配置中心

目录一、Nacos简介1.为什么叫Nacos2.是什么3.能干嘛4.去哪下5.各种注册中心比较二、安装并运行Nacos三、Nacos作为服务注册中心演示1.官网文档2.基于Nacos的服务提供者3.基于Nacos的服务消费者4.服务注册中心对比4.1 Nacos和CAP4.2 Nacos支持AP和CP模式的切换四、Nacos作为服务…

sonar的安装以及使用

sonar的安装以及使用简介1. sonar是什么2. SonarQube与Sonar安装1.下载sonarqubexxx.zip并且解压即可:2.配置数据库3.重启sonarQube会自动建表。使用1.下载sonar-scanner:(这个工具是对源码进行扫描&#xff0c;并将结果保存到数据库以便用上面的sonarqube进行分析)2.配置mysql…

Spring Cloud 以及 Spring Cloud Alibaba 使用总结

title: Spring Cloud 以及 Spring Cloud Alibaba 使用总结 date: 2023-01-13 11:54:15 tags: Spring categories:Spring cover: https://cover.png feature: false 1. 版本对应 官网版本说明&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki (github.com) 这里使用 …

通过应用场景深度理解监控宝在业务中的实践价值

近年来&#xff0c;越来越多的企业实现了核心业务系统互联网化&#xff0c;无论是企业内部员工还是企业外部用户或是供应链上下游合作伙伴&#xff0c;均通过互联网和Web应用与企业建立起了紧密的联系。基于此&#xff0c;网络性能对企业业务的影响也变得越来越重要&#xff0c…

阿里云服务器使用docker部署springboot+mysql+redis项目

首先&#xff0c;由于springboot中使用的内置的tomcat&#xff0c;需要讲将ttp转为https的自行搜索博客把&#xff1a; 步骤大概是再阿里云上注册免费SSL证书&#xff0c;下载证书后 拖到项目资源目录下&#xff0c;配置application.properties相关属性 下面引出博客主要内容……

校园网免认证上网的方法

很多时候&#xff0c;当流量不够用时&#xff0c;看着周围那么多热点又连不上&#xff0c;是不是有点心痒痒呢&#xff1f;那么有没有办法不需要要通过这些热点的认证即可上网呢&#xff1f;当然是有的。另外在此强调一点&#xff0c;本教程仅用于学习测试用途&#xff0c;请勿…

【靶机】vulnhub靶机my_file_server2

靶机下载地址&#xff1a;My File Server: 2 ~ VulnHubip&#xff1a;192.168.174.144Kali&#xff1a;192.168.174.128使用arp-scan扫描到ip是使用nmap扫描开放的端口信息&#xff0c;发现靶机开放端口信息如下21端口ftp服务&#xff0c;允许匿名&#xff08;anonymous&#x…

编译安装nacos集群部署

Nacos 基于 java 开发的&#xff0c;运行依赖于 java 环境。依赖 64 bit JDK 1.8服务器准备&#xff1a;192.168.11.139、192.168.11.141、192.168.11.142 1.首先上传jdk的包 三台都操作tar xzf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压jdk的包cd /usr/local/ 切换至解…

计算机图形学 第9章 自由曲线曲面

第8章不学 目录 # 学习目标 # 消隐 ## 定义 1.线框模型 2.表面模型 3.实体模型 双表结构 定义三维顶点类 定义表面类 读入立方体的点表 读入立方体的面表 1.柏拉图多面体 柏拉图多面体对偶性 正四面体 正八面体 正十二面体 黄金数 黄金矩形 黄金三角形 光滑物体 …

Spring Bean 的生命周期

文章目录一、前言二 、Bean 的生命周期2.1 Bean 的定义信息2.2 Bean 的创建2.3 Bean 的使用2.4 Bean 的销毁2.5 循环依赖2.5.1 什么是循环依赖2.5.2 Spring 解决循环依赖2.5.2.1 三级缓存2.5.2.2 提前暴露2.5.3 注意2.5.3.1 三级缓存结构中 map 分别存储什么类型对象2.5.3.2 三…

JVM-内存与垃圾回收-1.JVM与Java体系结构

1.JVM与Java体系结构 1. JVM&#xff1a;跨语言的平台 Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了&#xff0c;它更是一个平台、一种文化、一个社区。 ● 作为一个平台&#xff0c;Java虚拟机扮…

机器人中的数值优化之BFGS(nonconvex and smooth)

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 wolfe conditions 2 cautious update 3 BFGS for nonconvex functions 1 wolfe conditions 当我们需要搜索方向是下降方向时&#xff0c;一定要让近似hessian的矩阵正定&#xff0c;这就需要满足wolfe条件 首先需要满…

34. 实战:基于某api实现歌曲检索与下载(附完整源代码)

目录 前言 &#xff08;相关链接在评论区&#xff09; 目的 &#xff08;相关链接在评论区&#xff09; 思路 &#xff08;相关链接在评论区&#xff09; 代码实现 1. 访问某音乐平台&#xff08;链接放在评论区了&#xff09;&#xff0c;抓包搜索接…

BUUCTF reverse题解汇总

本文是BUUCTF平台reverse题解的汇总 Page1 easyrereverse1reverse2内涵的软件新年快乐xorhelloworldreverse3不一样的flagSimpleRevJava逆向解密[GXYCTF2019]luck_guy[BJDCTF2020]JustRE刮开有奖简单注册器pyre[ACTF新生赛2020]easyrefinditrsa[ACTF新生赛2020]rome[FlareOn4]…

穿越寒冬春暖花开,当下便是在社科院杜兰金融管理硕士项目读研的好时光

时间无声的从指尖划过&#xff0c;严寒的冬天已经过去&#xff0c;春天即将到来。23考研期间&#xff0c;恰逢特殊时期&#xff0c;好多同学错失了考试的机会&#xff0c;忧心2023是否还可以读研。不要担心&#xff0c;免联考的社科院与杜兰大学金融管理硕士项目来了&#xff0…

【html】如何处理显示ttf字体图标

当看到某些文件的后缀名是ttf&#xff0c;表示是字体文件&#xff0c;除了显示字体&#xff0c;还能显示图标&#xff0c;如果需要显示的图标太多&#xff0c;就把它们放在一个文件中&#xff0c;方便统一管理图标&#xff0c;在此讲一下怎么显示字体图标。 打开文件 电脑上用…

超低损耗电路新研究:光芯片电路+量子计算

&#xff08;图片来源&#xff1a;网络&#xff09;在光通信以及使用光而不是电荷来存储和传输信息的量子计算机的设计中&#xff0c;要做到以最小的损耗传输&#xff0c;并能操纵最小单位光&#xff0c;光子起着至关重要的作用。现在&#xff0c;美国国家标准与技术研究院的研…