[和小菜雞一起刷題(python)] LeetCode 108. 將有序陣列轉換為二叉搜尋樹(Convert Sorted Array to Binary Search Tree)
阿新 • • 發佈:2018-12-25
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