Problem
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
too young 思路
。。。。哈????
我大概看懂他是啥意思了,但是em。。。。
难道是二分法??
不停的找到位于中点位置的数字,然后放在下一个结点的位置
我能想到的就是这么多了,但是不太会写
dalao 思路-48ms
80ms,容易理解
# 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):
if not nums:
return None
mid = (len(nums)-1) / 2 #when we're counting the position in [array], it always starts with 0
print mid
root = TreeNode(nums[mid])
root.left = self.sortedArrayToBST(nums[:mid])
root.right = self.sortedArrayToBST(nums[mid+1:])
return root
48ms, 我也不知道为什么这种比较快
Many of the approaches here suggest slicing an array recursively and passing them. However, slicing the array is expensive. It is better to pass the left and right bounds into recursive calls instead.
# 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):
def covert(left, right):
if left > right:
return None
mid = (left + right) / 2
root = TreeNode(nums[mid])
root.left = covert(left, mid-1)
root.right = covert(mid+1, right)
return root
return covert(0, len(nums)-1)