当前位置: 首页 > news >正文

leetcode108.把升序数组转换成二叉搜索树

题目描述

[-10,-3,0,5,9] 转换成如下二叉搜索树:

解题的核心原理是:二叉搜索树的中序遍历结果是一个升序数组,所以根节点的数值,也位于数组的中部。

class Solution {public TreeNode sortedArrayToBST(int[] nums) {return helper(nums, 0, nums.length - 1); //递归}//nums={-10,-3,0,5,9}public TreeNode helper(int[] nums, int left, int right) { //开始结点大于尾结点,返回null,这个null在后续的递归中,其实是叶子结点。if (left > right) {  //比如left是0,right是mid-1=-1//叶子结点是nullreturn null;} // 总是选择中间位置左边的数字作为根节点int mid = (left + right) / 2; //mid=(0+4)/2=2//初始化二叉搜索树的根结点,最终返回这个根节点TreeNode root = new TreeNode(nums[mid]);         //helper(nums,0,1)-> root.left是-10//左侧的值都比根节点要小//mid-1是这行代码的关键root.left = helper(nums, left, mid - 1); //helper(nums,3,4)-> root.right是5//右侧的值都比根节点要大root.right = helper(nums, mid + 1, right);return root; //返回二叉搜索树的根节点}
}

执行过程:

nums={-10,-3,0,5,9}
helper(nums,0,4)
mid=2   nums[2]=0 root=0
root.left=helper(nums,0,1)==>( mid=0  nums[0]=-10 root=-10 root.left=helper(nums,0,-1)=null root.right=(nums,1,1) ==> (mid=1, root=nums[1]=-3,root.left=helper(nums,1,0)=null  root.right=helper(nums,2,1)=null))root.right=helper(nums,3,4)==>(left=3,right=4,mid=(3+4)/2=3 nums[3]=4  root=4root.left = helper(nums,3,2)=nullroot.right = helper(nums,4,4)==>{  left=4, right=4,mid=4,root=nums[4]=9root.left=helper(nums,4,3)=nullroot.right=helper(nums,5,4)=null}	
)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【前端】VUE动态引入组件 通过字符串动态渲染模板 动态生成组件
  • 【ubuntu24.04】k8s 部署5:配置calico 镜像拉取
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(十二)
  • 目标检测 | yolov6 原理和介绍
  • PDF转图片 JAVA
  • go--入门学习(二)
  • Python入门教程(超详细)
  • qiankun微任务之全局状态管理
  • Linux安装最新版Docker完整教程
  • stm32各个系列开发部库下载地址
  • 【Redis】数据类型详解及其应用场景
  • [云计算] 导论学习笔记
  • EasyCVR视频汇聚平台构建远程安防监控:5大亮点解析,助力安防无死角
  • 前端宝典之八:React状态管理全解析并手写实现
  • 动手学深度学习(pytorch)学习记录12-激活函数[学习记录]
  • Bytom交易说明(账户管理模式)
  • Django 博客开发教程 8 - 博客文章详情页
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript异步流程控制的前世今生
  • Laravel Telescope:优雅的应用调试工具
  • PHP的Ev教程三(Periodic watcher)
  • Python中eval与exec的使用及区别
  • ReactNativeweexDeviceOne对比
  • Redis 中的布隆过滤器
  • 从重复到重用
  • 复习Javascript专题(四):js中的深浅拷贝
  • 欢迎参加第二届中国游戏开发者大会
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 一份游戏开发学习路线
  • 追踪解析 FutureTask 源码
  • 最近的计划
  • ionic异常记录
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 数据库巡检项
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • %@ page import=%的用法
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4) PIVOT 和 UPIVOT 的使用
  • (PADS学习)第二章:原理图绘制 第一部分
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二)c52学习之旅-简单了解单片机
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (算法)前K大的和
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 物件導向與老子思想 (OO)
  • (转)nsfocus-绿盟科技笔试题目
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • **PHP分步表单提交思路(分页表单提交)
  • ./configure、make、make install 命令
  • .gitignore文件忽略的内容不生效问题解决
  • .NET 8.0 发布到 IIS