题目
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
思路
这道题是要将有序数组转为二叉搜索树,所谓二叉搜索树,是一种始终满足 左<根<右 的特性的二叉树,如果将二叉搜索树按中序遍历的话,得到的就是一个有序数组了。那么反过来,我们可以得知,根节点应该是有序数组的中间点,从中间点分开为左右两个有序数组,在分别找出其中间点作为原中间点的左右两个子节点,这不就是二分查找法的核心思想么。所以这道题考的就是二分查找法。
采用二分法来创建平衡二叉树,根结点刚好为数组中间的节点,根节点的左子树的根是数组左边部分的中间节点,根节点的右子树是数据右边部分的中间节点;代码执行结果和示例给出结果可能不同,但满足平衡二叉树。
Python3代码
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def sortedArrayToBST(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
if nums == None or len(nums) == 0:
return None
return self.recursion(nums, 0, len(nums)-1)
def recursion(self, nums, left, right):
if left <= right:
mid = int((left + right)/2)
p = TreeNode(nums[mid])
p.left = self.recursion(nums, left, mid-1)
p.right = self.recursion(nums, mid+1, right)
return p
else:
return None