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