1, 题目

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

  1. 给定有序数组: [-10,-3,0,5,9],
  2. 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
  3. 0
  4. / \
  5. -3 9
  6. / /
  7. -10 5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2, 算法

  1. #scala
  2. object Solution {
  3. def sortedArrayToBST(nums: Array[Int]): TreeNode = {
  4. f(nums, 0, nums.length)
  5. }
  6. def f(nums: Array[Int], start: Int, end: Int): TreeNode = {
  7. if (start < end) {
  8. val root = new TreeNode(nums(start + (end - start) / 2))
  9. root.left = f(nums, start, start + (end - start) / 2 )
  10. root.right = f(nums, start + (end - start) / 2 + 1, end)
  11. root
  12. } else {
  13. null
  14. }
  15. }
  16. }
  1. #python
  2. class Solution:
  3. def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
  4. return self.f(nums, 0, len(nums))
  5. def f(self, nums: List[int], start: int, end: int):
  6. if start < end:
  7. middle = start + (end - start) // 2
  8. root = TreeNode(nums[middle])
  9. root.left = self.f(nums, start, middle)
  10. root.right = self.f(nums, middle + 1, end)
  11. return root
  12. else:
  13. return None