108. 将有序数组转换为二叉搜索树
- 给你一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵 平衡二叉搜索树。
- 思路:(递归法, 寻找根节点类似于二分查找)
- 选择中间元素:每次递归选择当前数组区间的中间元素作为根节点。
- 递归构建左右子树:递归地使用数组的左半部分构建左子树,使用右半部分构建右子树。
class Solution(object):def sortedArrayToBST(self, nums):""":type nums: List[int]:rtype: Optional[TreeNode]"""if not nums:return Nonedef create(left, right):if left > right:return Nonemid = (left + right) // 2root = TreeNode(nums[mid])root.left = helper(left, mid - 1)root.right = helper(mid + 1, right)return rootreturn create(0, len(nums) - 1)
- 时间复杂度: O(n)
- 空间复杂度: O(n) , 其中,O(log n) 是递归栈的空间,O(n) 是存储树节点所需的空间