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

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

1. 题目

在这里插入图片描述

2. 分析

先理解一下平衡二叉树的概念:平衡二叉树重在平衡,同时需要保证顺序大小。

本题的思路比较简单,在构建平衡二叉树的时候,需要保证左右子树的高度相同,高度相同也就意味着要均匀切分,那么对于有序数组直接采取二分的方法是不是就能满足这个要求了呢?(可以手动比画一下,可以发现是没问题的哈)。所以对一个有序数组做二分,小于mid值对应的数组作为左子树,大于mid值的对应数组作为右子树。递归处理即可解决。

如果提高一下难度,可以将本题的数组替换成链表。二分操作不再是简单的(left+right)//2了,而是需要通过快慢指针找到中间节点做分割。更详细的可以参考这篇文章。

3. 代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:root = self.dfs(0, len(nums)-1, nums)return rootdef dfs(self, left, right, nums):# 不要忘了下面这种递归的出口if left > right:return Noneif left == right:return TreeNode(nums[left])mid = (left + right) // 2lnode = self.dfs(left, mid-1, nums)rnode = self.dfs(mid+1, right, nums)cur_val = nums[mid]cur_root = TreeNode(cur_val, lnode, rnode)return cur_root

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql数据库迁移
  • Face2V人脸向量开发包
  • 使用python爬取今日头条热搜
  • 使用EntityFramework8的学习和开发过程中一些经验
  • Webpack、Vite区别知多少?
  • Linux Ubuntu 20.04 netmap安装
  • OD C卷 - 中庸行者
  • 第128天:内网安全-横向移动IPCATSC 命令Impacket 套件CS 插件全自动
  • 代码随想录 day 30 贪心
  • RabbitMQ应用场景及特性
  • PointMC: Multi-instance Point Cloud Registration based on Maximal Cliques 论文解读
  • 经典算法KMP讲解,包含C++解法ACM模式
  • Python脚本实现USB自动复制文件
  • ADC模数转换在stm32上的应用
  • C语言基础题:硬币问题(C语言版)
  • [译]如何构建服务器端web组件,为何要构建?
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【Leetcode】104. 二叉树的最大深度
  • 2019.2.20 c++ 知识梳理
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • iOS | NSProxy
  • java2019面试题北京
  • Java编程基础24——递归练习
  • js继承的实现方法
  • PAT A1092
  • 阿里研究院入选中国企业智库系统影响力榜
  • 官方解决所有 npm 全局安装权限问题
  • 检测对象或数组
  • 目录与文件属性:编写ls
  • 如何用vue打造一个移动端音乐播放器
  • 使用 Docker 部署 Spring Boot项目
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • ​flutter 代码混淆
  • ​iOS实时查看App运行日志
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • # Redis 入门到精通(九)-- 主从复制(1)
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #### go map 底层结构 ####
  • #{}和${}的区别是什么 -- java面试
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)无线电失控保护(二)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C#)获取字符编码的类
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (solr系列:一)使用tomcat部署solr服务
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (利用IDEA+Maven)定制属于自己的jar包
  • (一)Java算法:二分查找
  • (一)u-boot-nand.bin的下载
  • (转)3D模板阴影原理
  • (转)菜鸟学数据库(三)——存储过程
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008