Easy
給定升序的有序數列,簡歷高度平衡的二叉搜索樹。
Solution:
什么是二叉搜索樹?
left_subtree (keys) ≤ node (key) ≤ right_subtree (keys)
二叉搜索樹
什么是高度平衡樹?
空樹平衡,非空二叉樹滿足下面條件時為平衡:
- 左分支平衡
- 右分支平衡
- 左右分支樹的高度差不大于1
所以上圖其實也是一棵高度平衡樹。
知道了高度平衡二叉搜索樹的定義,那么思路就比較清晰了。
- 找有序序列中間的值作為樹的根節點。如果有序數列含有偶數個值應該選中間兩個數的哪個呢?答案是無所謂的,因為都可以構建成功,這道題的答案不唯一。
- 對中間數的左邊序列和右邊序列重復1。
# 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
"""
try:
mid_index = len(nums)/2
root = TreeNode(nums[mid_index])
root.left = self.sortedArrayToBST(nums[:mid_index])
root.right = self.sortedArrayToBST(nums[mid_index+1:])
return root
except:
return None