2020/3/18 打卡
题目
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5
思路
这里有个思想,因为是排好序的,所以转换到 排序二叉树时,一定是序列的中间位置的结点作为根节点,中间位置所分开的左右部分,分别会放置到二叉搜索树的 左右子树部分。
解法有点类似二分分治法吧。 (1)先找到有序序列的中间位置。 (2)按照中间位置,进行 左部分数组 中间点 右部分数组 的划分。 (3)以中间点创建节点, 然后 以左部分数组做 左子树,并进行其深一步的 递归子树构建。右部分数组同理
代码
class Solution(object):
def sortedArrayToBST(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
#边界条件
if not nums:
return None
else:
# (1)步骤
mid=len(nums)/2
#(2)步骤
nums1=nums[0:mid]
nums2=nums[mid+1:len(nums)]
#(3)步骤
tn=TreeNode(nums[mid])
tn.left=self.sortedArrayToBST(nums1)
tn.right=self.sortedArrayToBST(nums2)
return tn