108. Convert Sorted Array to Binary Search Tree
題目描述
給定一個有序升序數組,輸出可能的平衡二叉樹
Example:
Given the sorted array: [-10,-3,0,5,9]
One possible answer is: [0,-3,9,-10,null,5]
0
/ \
-3 9
/ /
-10 5
解題思路
平衡二叉樹就是左右子樹高度不能超過1。從數組的角度來看,每次取數組中間數作爲根節點,可保證左右剩下的元素個數相差不超過1。
繼續左子樹的中間數作爲根節點,繼而又保證其左右剩下的元素個數相差不超過1。以此遞歸,最終能組成平衡二叉樹。
數組的中間數作爲根節點,左節點爲數組左半部分的中間值,右節點爲數組右半部分的中間數。當傳入的數組爲空時結束遞歸。
代碼
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
return self.helper(nums, 0, len(nums)-1)
def helper(self, nums, left, right):
if left <= right:
mid = (left + right)//2
node = TreeNode(nums[mid])
node.left = self.helper(nums, left, mid-1)
node.right = self.helper(nums, mid+1, right)
return node