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

概述:给你一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]输入:nums = [1,3]
输出:[3,1]

方法一:中序遍历,中间位置左边

思路:选择中间位置左边的数字作为根节点,则根节点的下标为 mid=(left+right)/2 ,此处的除法为整数除法。

# 中序遍历,中间位置左边
class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:def helper(left, right):if left > right:return Nonemid = (left + right) // 2 # 中间位置左边的数字作为根节点root = TreeNode(nums[mid])root.left = helper(left, mid - 1)root.right = helper(mid + 1, right)return rootreturn helper(0, len(nums) - 1)

方法二:中序遍历,中间位置右边

思路:选择中间位置右边的数字作为根节点,则根节点的下标为 mid=(left+right+1)/2,此处的除法为整数除法。

# 中序遍历,中间位置右边
class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:def helper(left, right):if left > right:return Nonemid = (left + right + 1) // 2 #中间位置右边的数字作为根节点root = TreeNode(nums[mid])root.left = helper(left, mid - 1)root.right = helper(mid + 1, right)return rootreturn helper(0, len(nums) - 1)

方法三:中序遍历,任意一个中间位置

思路:选择任意一个中间位置数字作为根节点,则根节点的下标为 mid=(left+right)/2mid=(left+right+1)/2 两者中随机选择一个,此处的除法为整数除法。

# 中序遍历,任意一个中间位置
import random
class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:def helper(left, right):if left > right:return Nonemid = (left + right + random.randint(0, 1)) // 2 # 选择任意一个中间位置数字作为根节点root = TreeNode(nums[mid])root.left = helper(left, mid - 1)root.right = helper(mid + 1, right)return rootreturn helper(0, len(nums) - 1)

总结

为啥我感觉这三种方法其实是一种?!

LeetCode(Python)—— 将有序数组转换为二叉搜索树(简单)相关推荐

  1. 20190917:(leetcode习题)将有序数组转换为二叉搜索树

    将有序数组转换为二叉搜索树 题目 大致思路 代码实现 题目 大致思路 将有序数组转换为二叉平衡树,即左边的数和右边数的差值不超过1,那么root节点应该为正中间的数,然后左边的剩余的中间为root.l ...

  2. leetcode刷题记录--数据结构;深度优先搜索算法;二叉树;平衡树;1020. 飞地的数量;1669. 合并两个链表;108. 将有序数组转换为二叉搜索树

    1020. 飞地的数量 难度中等131 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格.1 表示一个陆地单元格. 一次 移动 是指从一个陆地单元格走到另一个相邻(上 ...

  3. laravel数组转换为字符串_LeetCode刷题实战108:将有序数组转换为二叉搜索树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. 将字符串转换为数组_LeetCode 树 108.将有序数组转换为二叉搜索树

    7(108) 将有序数组转换为二叉搜索树 描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 ...

  5. 数据结构与算法--力扣108题将有序数组转换为二叉搜索树

    力扣108提将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫, ...

  6. [leetcode-108,109] 将有序数组转换为二叉搜索树

    109. 有序链表转换二叉搜索树 Given a singly linked list where elements are sorted in ascending order, convert it ...

  7. 20200703:将有序数组转换为二叉搜索树(leetcode108)

    将有序数组转换为二叉搜索树 题目 思路与算法 代码实现 复杂度分析 题目 将有序数组转换为二叉搜索树 思路与算法 乍一看很简单,实际也很简单,今天的动态规划没做出来,就刷每日一题好了.保证平衡的最简单 ...

  8. Suzy找到实习了吗 Day23 | 二叉树最后一节!669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

    669. 修剪二叉搜索树 题目 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high.通过修剪二叉搜索树,使得所有节点的值在[low, high]中.修剪树 不应该 改变保 ...

  9. LeetCode实战:将有序数组转换为二叉搜索树

    题目英文 Given an array where elements are sorted in ascending order, convert it to a height balanced BS ...

最新文章

  1. 9月14日学习内容整理:初识别面向对象
  2. springboot 读取application.properties流程
  3. dataset的去重计数 g2_向工程渣土运输车辆计数 漏洞损失说“不”
  4. vue打开html自动加载js,vue.js怎么实现懒加载
  5. Spring Session + Redis 实现 Session 共享,附带 Nginx 集群
  6. React 路由 中 BrowserHistory 刷新报404
  7. 图片验证码是如何刁难用户的?一招教你彻底去除图片验证码!
  8. IEEE Transactions on Systems, Man, and Cybernetics: Systems(TSMC)投稿须知
  9. seo三部曲之关键词策略
  10. 快乐玩前端:情人节请用代码表达你的爱意,女友收到都哭了
  11. 2019读过的好书推荐
  12. 使用蓝桥杯单片机做一个智能密码锁可以修改密码
  13. Trinity介绍与使用(一)
  14. Python自动生成ffmpeg转码HEVC (X265,H265) 命令
  15. 如何使用ReadProcessMemory读取多重指针
  16. Kali Linux 与 BackTrack Linux
  17. 电脑装机兼容性测试软件,四款产品内部兼容性测试
  18. Wault Finance闪贷攻击溯源
  19. 直播预告 | 12位一作华人学者开启 ICLR 2022
  20. 基于51单片机的智能火灾报警系统

热门文章

  1. 《深入浅出DPDK》——DPDK网络功能虚拟化
  2. Openwrt/lede软路由设置为ap模式
  3. 融汇贯通实用的socket属性典型讲解
  4. H2.64和H2.65编码区别
  5. 懈寄生——帮助过我的那些书那些人
  6. 思科大学计算机第一章测试题及答案,集美大学思科上机练习1
  7. java的Date类的getYear(),getMonth()等函数过时
  8. JVM(Java虚拟机模型、Java运行时数据区模型)
  9. Java菜鸟到大牛学习路线培训视频
  10. 真香!java设置全局变量