题目
思路
众所周知,二叉搜索树的中序遍历(左中右)是一个有序递增数列,高度平衡二叉树左右高度差不超过1,可以从数组中间取值作为根节点,把整棵树分成两部分,之后利用递归分别从左右两个区间取中间值作为左右结点,有点类似二分查找法。
代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def sortedArrayToBST(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
def helper(left, right): ##定义方法,因为取中间值需要左右下标,所以参数为左右两个端点的值
if left > right: ##遍历完毕条件
return None
mid = (left + right) / 2 ##取中间值作为根节点
root = TreeNode(nums[mid]) ##设置根节点
root.left = helper(left, mid - 1) ##递归生成左节点
root.right = helper(mid + 1, right) ##递归生成右节点
return root ##返回根节点
return helper(0, len(nums) - 1) ##输入数组最小下标和最大下标