1. 程式人生 > >[和小菜雞一起刷題(python)] LeetCode 108. 將有序陣列轉換為二叉搜尋樹(Convert Sorted Array to Binary Search Tree)

[和小菜雞一起刷題(python)] LeetCode 108. 將有序陣列轉換為二叉搜尋樹(Convert Sorted Array to Binary Search Tree)

LeetCode 108. 將有序陣列轉換為二叉搜尋樹(Convert Sorted Array to Binary Search Tree)

原題

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

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

示例:

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

              0
            /   \
          -3     9
         /       /
      -10       5

思路

二叉搜尋樹(Binary Search Tree)是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值。
題目給定的是有序陣列,為滿足高度平衡,選取陣列中間位置對陣列進行切分,該點為根節點,切分的左半部分構成左子樹,右半部分構成右子樹。隨後利用遞迴構成整顆樹。

程式碼

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