1. 程式人生 > >leetcode-108. 將有序陣列轉換為二叉搜尋樹

leetcode-108. 將有序陣列轉換為二叉搜尋樹

題目

將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。

本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。

示例:

給定有序陣列: [-10,-3,0,5,9],

一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:

0
/ \
-3 9
/ /
-10 5

解題思路

每次使用最中間的節點的值,來建立節點。
使用遞迴。

程式碼

# Definition for a binary tree node.
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def sortedArrayToBST(self, nums): """ :type nums: List[int] :rtype: TreeNode """ def help(nums,low,high): if
low>high: return None mid = (1+low+high)//2 L = TreeNode(nums[mid]) L.left = help(nums,low,mid-1) L.right = help(nums,mid+1,high) return L return help(nums,0,len(nums)-1)

學習別人程式碼

跟我的思路一樣,就是更簡潔的實現了

class Solution
:
def sortedArrayToBST(self, nums): """ :type nums: List[int] :rtype: TreeNode """ if not nums: return None mean = len(nums)//2 tree = TreeNode(nums[mean]) tree.left = self.sortedArrayToBST(nums[:mean]) tree.right = self.sortedArrayToBST(nums[mean+1:]) return tree