《算法通关村——透彻理解二叉树中序遍历的应用》

news2024/10/6 12:27:06

《算法通关村——透彻理解二叉树中序遍历的应用》

直接上题

108. 将有序数组转换为二叉搜索树

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

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

示例 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 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums严格递增 顺序排列

想法

首先我们要理解题目,要是一颗高度平衡的二叉搜索数,所以需要满足两个条件,一个就是二叉搜索树对于任意一个子树,左节点的值小于根节点,右节点的值大于根节点。平衡树,根节点左右子树的深度差不得大于1。 根据题目是一个排好序的数组,我们可以很快的想到利用二分法来进行建立二叉搜索树,每建立一个节点都是已给数列的一半,这样我们就能保证平衡,然后把小的一半放到左边,把大的一半放到右边就满足二叉搜索了。看代码

题解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        int left = 0;
        int right = nums.length-1;
        return helper(nums,left,right);
    }
    public TreeNode helper(int[] nums ,int left , int right){
        if(left > right ){
            return null;
        }
        int mid = (left + right) >>1;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = helper(nums,left,mid-1);
        root.right = helper(nums,mid+1,right);
        return root;
    }
}

点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

也可以加我QQ(2837468248)咨询说明来意!

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

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

相关文章

【电工基础】

电工基础 11.1 简介1.2 电路作用1.3 电路模型1.4 电流定义1.5 电压定义1.6 电动势1.7 电阻元件1.7.1 电阻元件定义1.7.2 电阻原件的特性1.7.31.7.4 1.81.91.10 345 1 1.1 简介 电源外部&#xff0c;正电荷移动的方向是由电源正极向电源负极方向&#xff0c;负电荷移动的方向是…

GEE:遥感影像二值化

作者:CSDN @ _养乐多_ 在Google Earth Engine(GEE)中,图像二值化是将图像中的像素值转换为二进制(0或1)的过程。这通常用于将连续的遥感图像转换为只有两个值的二值图像,以突出图像中的特定特征或区域。 结果如下图所示,将NDVI图像中,大于0.3的值设置为1(黑色),小…

VBA_MF系列技术资料1-217

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

超详细的性能测试流程

一、性能测试概念 我们经常看到的性能测试概念&#xff0c;有人或称之为性能策略&#xff0c;或称之为性能方法&#xff0c;或称之为性能场景分类&#xff0c;大概可以看到性能测试、负载测试、压力测试、强度测试等一堆专有名词的解释。 针对这些概念&#xff0c;我不知道你…

Harbor了解及部署

Harbor 无论是使用Docker-distribution去自建仓库&#xff0c;还是通过官方镜像跑容器的方式去自建仓库&#xff0c;通过前面的演示我们可以发现其是非常的简陋的&#xff0c;还不如直接使用官方的Docker Hub去管理镜像来得方便&#xff0c;至少官方的Docker Hub能够通过web界…

认识继承和多态

1 继承 1.1 为什么需要继承 Java 中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;那在设计程序里就需要考虑 比如&a…

赶紧收藏!阿里内部使用的127页k8s实战手册,不能再详细了!

2022 年 12 月 8 号Kubernetes 发布了1.26新版本&#xff0c;此版本中有两个突出的新功能&#xff0c;它们有可能改变用户与 Kubernetes 交互的方式&#xff0c;此外&#xff0c;其他功能将使集群管理员的工作更轻松。 说起来&#xff0c;Kubernetes从诞生初期就广泛受到业界的…

英国访问学者类型签证详解

近年来&#xff0c;英国作为世界上优秀的学术研究中心之一&#xff0c;吸引了众多国际学者的目光。为了促进国际学术交流&#xff0c;英国设立了多种类型的访问学者签证&#xff0c;以满足不同学者的需求。在本文中&#xff0c;我们将深入探讨英国访问学者类型签证及其特点。 1…

金字塔原理小节

目录 第1章 为什么要用金字塔结构 一、归类分组&#xff0c;将思想组织成金字塔 二、奇妙的数字“7” 三、归类分组搭建金字塔 四、找出逻辑关系&#xff0c;抽象概括 五、自上而下表达&#xff0c;结论先行 第1章 为什么要用金字塔结构 如果受众希望通过阅读你的文章、听…

osg点云加载与渲染

目录 效果 laslib 关键代码 完整代码 效果 las点云读取使用了laslib这个库。 laslib 关键代码 {// 这里演示读取一个 .txt 点云文件const char* lasfile path.c_str();std::ifstream ifs;ifs.open(lasfile, std::ios::in | std::ios::binary);liblas::ReaderFactory f;libl…

MySQL数据库基础和操作

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; MYSQL数据库 &#x1f319;请不要相信胜利就像山坡上的蒲公英一…

C++ 开发【深入浅出】笔记02

多态 同一种类型的不同表现形式基类指针指向基类对象基类对象调用的成员函数&#xff0c;基类指针指向派生类对象则调用派生类得成员函数&#xff0c;这种现象就称为多态构成多态的条件 继承关系基类多态函数必须声明为虚函数&#xff08;virtual&#xff09;派生类必须覆盖&am…

【原创课设】java+swing+mysql药店管理系统设计与实现

摘要&#xff1a; 药店管理系统对于药店运营具有重大的意义。首先&#xff0c;它可以提高药店的运营效率&#xff0c;减少人工操作成本&#xff0c;通过信息化的管理方式&#xff0c;可以提高药店的服务质量和管理水平&#xff0c;增强药店的市场竞争力。用户可以登录系统直接…

Spring Boot (三)

1、热部署 热部署可以替我们节省大把花在重启项目本身上的时间。热部署原理上&#xff0c;一个springboot项目在运行时实际上是分两个过程进行的&#xff0c;根据加载的东西不同&#xff0c;划分成base类加载器与restart类加载器。 base类加载器&#xff1a;用来加载jar包中的类…

Unity中【UniTask异步流程】如何进行【步骤分段】、【步骤撤销】、【步骤跳转】、【取消异步任务】

一、UniTask和Task UniTask是Unity中的Task实现&#xff0c;Task是C#中实现异步操作的一个模块(类)。UniTask与Task有着同样的使用思路&#xff08;使用习惯&#xff0c;常用API等&#xff09;&#xff0c;可以说UniTask是借鉴Task而开发出来的。 二、需求的来源 以前有一个…

Android---内存泄漏的优化

内存泄漏是一个隐形炸弹&#xff0c;其本身并不会造成程序异常&#xff0c;但是随着量的增长会导致其他各种并发症&#xff1a;OOM&#xff0c;UI 卡顿等。 为什么要将 Activity 单独做预防&#xff1f; 因为 Activity 承担了与用户交互的职责&#xff0c;因此内部需要持有大…

3D渲染原理及朴素JavaScript实现【不使用WebGL】

在网页中显示图像和其他平面形状非常容易。 然而&#xff0c;当涉及到显示 3D 形状时&#xff0c;事情就变得不那么容易了&#xff0c;因为 3D 几何比 2D 几何更复杂。 为此&#xff0c;你可以使用专用技术和库&#xff0c;例如 WebGL 和 Three.js。 但是&#xff0c;如果你只…

SSH 远程登录 WSL

更新ssh设置 sudo apt-get update sudo apt-get remove openssh-server sudo apt-get install openssh-server 编辑网络配置 sudo vi /etc/ssh/sshd_config &#xff08;1&#xff09;修改ssh服务监听端口和监听地址 &#xff08;2&#xff09;修改ssh服务允许使用用户名密码…

KEIL MDK 调试 无法 查看 外设 信息 原因及解决方法

MDK5.38版本有bug : 不能把STM32F4的官方SVD文件转换成SFR&#xff0c;而MDK5.38a版本没有此问题。

【操作系统内核】进程

【操作系统内核】进程 进程的组成 进程的运行&#xff0c;需要考虑 磁盘 > 内存 > CPU > 内核 > 进程切换 这个过程 首先&#xff0c;程序运行要将可执行文件加载到内存&#xff0c;所以进程要读取可执行文件(运行后可能还需要读取其他文件的数据)&#xff0c;需…