108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
示例 1:
notion imagenotion image
输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
notion imagenotion image
示例 2:
notion imagenotion image
输入:nums = [1,3] 输出:[3,1] 解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
  • 1 <= nums.length <= 104
  • 104 <= nums[i] <= 104
  • nums 按 严格递增 顺序排列

法1 递归法

思路
将数组nums中间位置的值作为子树根节点,然后数组左边的作为左子树,数组右边的作为右子树
基线条件为
if len(nums) == 0: return None
题解
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def sortedArrayToBST(self, nums: List[int]) -> TreeNode: if len(nums) == 0: return None # 此判断属于 提前剪枝,因为只有一个元素了就没必要继续向下递归了,可以节省时间 if len(nums) == 1: return TreeNode(nums[0]) # 将中间值作为子树根节点 mid = len(nums) // 2 node = TreeNode(nums[mid]) node.left = self.sortedArrayToBST(nums[:mid]) node.right = self.sortedArrayToBST(nums[mid+1:]) return node