LeetCode 108. Convert Sorted Array to BST

简介: 给定一个数组,其中元素按升序排序,将其转换为高度平衡的BST。对于这个问题,高度平衡的二叉树被定义为:二叉树中每个节点的两个子树的深度从不相差超过1。

v2-8b8c8dfa23c45016272c0539318b401d_1440w.jpg

LeetCode 108. Convert Sorted Array to Binary Search Tree



Description


Given an array where elements are sorted in ascending order, convert it to a height balanced BST.


For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.


Example:


Given the sorted array: [-10,-3,0,5,9],

One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:


0
     / \
   -3   9
   /   /
 -10  5


描述



给定一个数组,其中元素按升序排序,将其转换为高度平衡的BST。


对于这个问题,高度平衡的二叉树被定义为:二叉树中每个节点的两个子树的深度从不相差超过1。


例:

给定排序数组:[ - 10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它代表以下高度平衡的BST:


0
     / \
   -3   9
   /   /
 -10  5


思路



  • 二叉树的题目使用递归求解比较简单.
  • 为了构造一棵平衡二叉树,我们每次都从给定数组的中间取值作为根节点,然后以当前值左边的所有值作为当前节点的左子树.
  • 当前值右边的所有节点作为当前节点的右子树.
  • 递归返回条件是已经取完了数组中的所有数,没有其它数可取,此时我们返回空节点.


# -*- coding: utf-8 -*-
# @Author:             何睿
# @Create Date:        2018-12-30 13:18:09
# @Last Modified by:   何睿
# @Last Modified time: 2018-12-30 13:30:43
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
class Solution:
    def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if not nums:
            return None
        return self.recursion(0, len(nums)-1, nums)
    def recursion(self, left, right, nums):
        # 递归结束条件,当left大于right时,返回空节点
        if left > right:
            return None
        # 取中间值作为当前根节点
        middle = left+((right-left) >> 1)
        # 声明根节点
        root = TreeNode(nums[middle])
        # 生成左子树
        leftree = self.recursion(left, middle-1, nums)
        # 生成右子树
        rightree = self.recursion(middle+1, right, nums)
        root.left = leftree
        root.right = rightree
        # 返回根节点
        return root


源代码文件在这里.


目录
相关文章
Leetcode 230. Kth Smallest Element in a BST
先来看下二叉搜索树的性质,对于任意一个非叶子节点,它的左子树中所有的值必定小于这个节点的val,右子树中所有的值必定大于或等于当前节点的val。 这条性质就保证了如果我们对二叉搜索树做中序遍历,中序遍历的结果肯定是有序的。对于此题而言,我们只需要拿到中序遍历结果,然后返回第k个即可,时间复杂度是O(n)。
63 1
Leetcode 4. Median of Two Sorted Arrays
题目描述很简单,就是找到两个有序数组合并后的中位数,要求时间复杂度O(log (m+n))。 如果不要去时间复杂度,很容易就想到了归并排序,归并排序的时间复杂度是O(m+n),空间复杂度也是O(m+n),不满足题目要求,其实我开始也不知道怎么做,后来看了别人的博客才知道有个二分法求两个有序数组中第k大数的方法。
39 0
Leetcode Find Minimum in Rotated Sorted Array 题解
对一个有序数组翻转, 就是随机取前K个数,移动到数组的后面,然后让你找出最小的那个数,注意,K有可能是0,也就是没有翻转。
48 0
Search in Rotated Sorted Array - 循环有序数组查找问题
Search in Rotated Sorted Array - 循环有序数组查找问题
70 0
LeetCode 167 Two Sum II - Input array is sorted(输入已排序数组,求其中两个数的和等于给定的数)
给定一个有序数组和一个目标值 找出数组中两个成员,两者之和为目标值,并顺序输出
86 0
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
|
算法 Python
LeetCode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree
LeetCode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree
|
算法 测试技术
LeetCode 88. 合并两个有序数组 Merge Sorted Array
LeetCode 88. 合并两个有序数组 Merge Sorted Array
|
1月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。