给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
例:
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
解析:
可以使用递归,每次去数组中间的值当根节点,左边的值为左子树,右边的值为右子树,两边值得个数不会超过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 build(left, right): # 构建树的函数
if left > right: # 终止条件
return None
mid = (left + right)/2 # 中间值得下标
root = TreeNode(nums[mid]) # 构建根节点
root.left = build(left, mid - 1) # 构建左子树
root.right = build(mid + 1, right) # 构建右子树
return root # 返回根节点
res = build(0, len(nums) - 1) # 调用函数
return res