leetcode每日一练-第108题-将有序数组转换为二叉搜索树

news2024/12/24 2:11:10

 

 

一、思路

递归

二、解题方法

在给定中序遍历序列数组的情况下,每一个子树中的数字在数组中一定是连续的,因此可以通过数组下标范围确定子树包含的数字,下标范围记为 [left,right]。对于整个中序遍历序列,下标范围从 left=0到 right=nums.size()−1。当 left>right 时,平衡二叉搜索树为空。

选择中间位置左边的数字作为根节点

三、code

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return helper(nums,0,nums.size()-1);
        
    }
    TreeNode* helper(vector<int>& nums,int left,int right)
    {
        if(left>right)//当左边界 left 大于右边界 right 时,意味着当前处理的区间为空,即没有元素可以用来构建子树了。这种情况下,我们返回 nullptr,表示当前子树为空树。
        {
            return nullptr;
        }

        int mid=(left+right+1)/2;//计算当前处理区间的中间位置,总是选择中间位置左边的数字作为根节点。这样可以保证构建的二叉搜索树是高度平衡的。
        TreeNode* root=new TreeNode(nums[mid]);//创建当前区间中间位置的元素值为根节点的二叉树节点。
        root->left=helper(nums,left,mid-1);//递归构建当前根节点的左子树,将左边界设为 left,右边界设为中间位置的前一个位置 mid - 1。
        root->right=helper(nums,mid+1,right);//递归构建当前根节点的右子树,将左边界设为中间位置的后一个位置 mid + 1,右边界设为 right。
        return root;
    }
};

 =========================================================================学到的知识:

前序遍历(Preorder Traversal):在二叉树中,先访问根节点,然后按照左子树、右子树的顺序递归遍历子树。在前序遍历中,根节点的访问顺序是最先的。

中序遍历(Inorder Traversal):在二叉树中,先按照左子树、根节点、右子树的顺序递归遍历子树。在中序遍历中,根节点的访问顺序位于左右子树之间。

后序遍历(Postorder Traversal):在二叉树中,先按照左子树、右子树、根节点的顺序递归遍历子树。在后序遍历中,根节点的访问顺序是最后的。

这三种遍历方式是深度优先搜索(DFS)的三种不同变种。它们分别有不同的应用场景:

  • 前序遍历:适用于需要先处理根节点再处理子节点的场景,比如复制整个树的结构或序列化为字符串。
  • 中序遍历:适用于二叉搜索树,可以将其按从小到大的顺序输出,比如查找树中第 k 小的元素。
  • 后序遍历:适用于释放二叉树的内存,先释放子节点再释放根节点,以防止访问已经释放的内存。

TreeNode* root = new TreeNode(nums[mid]);

这行代码用于创建一个新的二叉树节点,并将其值初始化为有序数组中间位置的元素 nums[mid] 

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

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

相关文章

【MySQL】视图与用户管理

【MySQL】视图 视图视图概念使用基表与视图的相互影响 用户管理新增用户删除修改密码 用户权限授予权限回收权限 视图 视图概念 视图就是一张虚拟表&#xff0c;其内容由查询定义。与真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化影响到基表&…

GEE学习02 --设置Jupyter Notebook的打开路径

直接双击Jupyter Notebook 桌面图标运行时&#xff0c;打开的文件路径是默认的&#xff1a;C&#xff1a;\用户\用户名 如果使用python命令提示符打开jupyter notebook &#xff0c; 而我新建的GEE学习文件夹在另一个路径&#xff0c;可以直接修改默认的保存路径&#xff1a;…

Ebay婴儿活动床栏CPC认证 ASTM F2085

活动床栏旨在防止儿童从床上掉落。活动床栏可以安装在床的一侧或床垫表面。活动床栏适用于可以在没有帮助的情况下上下床的儿童&#xff0c;通常为二至五岁的儿童。本政策涵盖泡沫、充气和刚性活动床栏。 根据亚马逊的要求&#xff0c;所有活动床栏均应经过检测&#xff0c;并且…

算法题--找规律(构建乘积数组、剪绳子、圆圈中最后剩下的数字)

目录 找规律 构建乘积数组 原题链接 解析 核心思想 答案 剪绳子 原题链接 解析 核心思想 答案 圆圈中最后剩下的数字 原题链接 解析 核心思想 答案 找规律 需要通过列举多个示例&#xff0c;从多个示例的输入到输出中得到规律去普遍化。 构建乘积数组 给定…

【黑马头条之kafka及异步通知文章上下架】

本笔记内容为黑马头条项目的kafka及异步通知文章上下架部分 目录 一、kafka概述 二、kafka安装配置 三、kafka入门 四、kafka高可用设计 1、集群 2、备份机制(Replication&#xff09; 五、kafka生产者详解 1、发送类型 2、参数详解 六、kafka消费者详解 1、消费者…

国内最大Llama开源社区发布首个预训练中文版Llama2

"7月31日&#xff0c;Llama中文社区率先完成了国内首个真正意义上的中文版Llama2-13B大模型&#xff0c;从模型底层实现了Llama2中文能力的大幅优化和提升。毋庸置疑&#xff0c;中文版Llama2一经发布将开启国内大模型新时代&#xff01; | 全球最强&#xff0c;但中文短板…

Ubuntu20.04进入桌面后左上角光标闪动

T 光标闪烁就是后台一系列活动的简化&#xff0c;它表示后台有一系列活动在进行&#xff0c;只是我们看不到。也因此让我们觉得它像是卡住了。 Y 一开始误以为是由于我安装其他启动动画导致的&#xff0c;后来换回默认的动画发现不是这个原因。 后来我试了各种方法&#xff…

Android安卓实战项目(7)---购物APP(源码在文末)

Android安卓实战项目&#xff08;7&#xff09;—购物APP&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09; 一.项目运行介绍 【bilibili展示】 https://www.bilibili.com/video/BV1xh4y1C7o1/?share_sourcecopy_web&vd_sourceb2e9b9ed746acd…

Linux系统安装部署MongoDB完整教程(图文详解)

前言&#xff1a;本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程&#xff0c;我的服务器采用的是Centos7&#xff0c;在部署之前我重装了我的服务器&#xff0c;目的是为了干净整洁的给大家演示我是如何一步步的操作的&#xff0c;整体部署还是挺简洁&#xff0c…

Vue3基础知识(待续)

Vue是什么 构用户界面的js的渐进式框架&#xff0c;基于htlm、css、js&#xff0c;并提供声明式组件化的编程模型&#xff0c;帮你高效开发用户界面。无论简单或复杂的界面Vue都可以胜任。 vue是一个框架&#xff0c;同时也是一个生态。因为有很多程序员支持vue&#xff0c;开…

【Python】Web学习笔记_flask(4)——钩子函数

钩子函数可以用来注册在请求处理的不同阶段执行出 Flask的请求钩子指的是在执行视图函数前后执行的一些函数&#xff0c; 之前是有4种&#xff0c;但是 before_first_request已经被删除了&#xff0c;使用时会报错 before_request&#xff1a;在每次请求前执行&#xff0c;…

Arc A770M的蝰蛇峡谷迷你电脑主机值得入手吗?

相比于已经走上正轨的NUC迷你电脑产品&#xff0c;英特尔的独显&#xff0c;特别是最新一代Arc&#xff08;锐炫&#xff09;还是犹抱琵琶半遮面。通过蝰蛇峡谷NUC&#xff0c;它算是正式亮相了。 这里的Serpent Canyon是英特尔NUC系列的最新产品。它在NUC 12 Enthusiast版本中…

高级C语言

1.day1 1、mobaxterm使用 1、更方便的使用虚拟机终端&#xff1b; 2、新建一个终端&#xff0c;CTRL SHIFT U; 3、清屏&#xff0c;CTRL L; 2、gdb调试 参考《gdb调试器练习》 2.day2 3.day3 1、vin自动生成main函数 1&#xff09;打开vim的配置文件&#xff1b; s…

【开源源码学习】

C 迷你高尔夫 一款打高尔夫的游戏。亮点是碰撞反应和关卡设计。 GitHub - mgerdes/Open-Golf: A cross-platform minigolf game written in C. TypeScript 俄罗斯方块 复刻经典的俄罗斯方块&#xff0c;项目采用ReactReduxImmutable的技术栈。 GitHub - chvin/react-tetr…

【Web】基于C#的学生选课系统开发

目录 一、实验目的二、设计数据库表三、设计学生、课程和已选课程类四、 系统流程图五、功能流程图六、总结 一、实验目的 1、设计学生类&#xff08;学号 | 姓名 | 班级 | 初始密码&#xff09; 2、设计课程类&#xff08;课程代码 | 课程名称 | 学分&#xff09; 3、设计已选…

HTML5 Canvas(画布)

<canvas>标签定义图形&#xff0c;比如图表和其他图像&#xff0c;你必须用脚本来绘制图形。 在画布上&#xff08; Canvas &#xff09;画一个共红色矩形&#xff0c;渐变矩形&#xff0c;彩色矩形&#xff0c;和一些彩色文字。 什么是 Canvas&#xff1f; HTML5<c…

数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…

linux安装Tomcat及部署jpress的详细教程!!!

一、YUM在线安装 1、查看Tomcat相关安装包 [rootlocalhost ~]# yum list | grep tomcat tomcat.noarch 7.0.76-16.el7_9 updates tomcat-admin-webapps.noarch 7.0.76-16.el7_9 updates tomcat-docs…

msvcr100.dll丢失的解决方法?三招解决msvcr100.dll丢失问题

最近我遇到了一个电脑问题&#xff0c;就是在运行某个软件时提示缺少msvcr100.dll文件。起初我并不知道这个文件是什么&#xff0c;也不知道它的作用&#xff0c;但通过一番搜索和了解&#xff0c;我对这个问题有了更深的理解&#xff0c;并且也得到了解决的办法。 解决方法一&…

分享学习java过程中遇到的一些网址

*****JavaWeb视频教程***** https://www.bilibili.com/video/BV1m84y1w7Tb?p4&spm_id_frompageDriver&vd_source841fee104972680a6cac4dbdbf144b50*****Java前端官网教程&#xff08;HTML、CSS、JS)***** https://www.w3school.com.cn/html/index.asp*****VS Code官网…