026-力扣刷题-108--将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。(最深的深度和最浅的深度不能超过1)
示例:
应该注意的是这里是可能的答案,这里的这个答案并不是唯一的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def sortedArrayToBST(self, nums): """ :type nums: List[int] :rtype: TreeNode """ def to_bst(nums,start,end): #定义一个递归的函数,传递进来的是原始的数组,以及起始跟终止的位置 if start > end: #当这个strat>end的时候就返回空,比如这里的mid跟start想等的时候,就直接返回空,意味着这个节点是空的就好了 return None mid = (start+end) // 2 #因为要求是高度平衡的二叉树,因此两边树的元素的个数相差不能超过1,我们就取中间值作为每一个根节点 node =TreeNode(nums[mid]) #存储这个节点的值 node.left=to_bst(nums,start,mid-1) #递归存储左孩子 node.right=to_bst(nums,mid+1,end) #递归存储右孩子 return node #返回这个节点 return to_bst(nums,0,len(nums)-1) #整个的递归调用,返回我们想要的数组 # print (node) |