108. 将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树

题意

将有序数组转化为链表;

解题思路

  1. 将数组切片,中间值作为根结点,两边则则作为左子树和右子树;

  2. 维护左右两个值,实现对数组切片的功能;

实现

class Solution(object):
   def sortedArrayToBST(self, nums):
       """
      :type nums: List[int]
      :rtype: TreeNode
      """
       if not nums:
           return None
       elif len(nums) == 1:
           return TreeNode(nums[0])
       
       mid = len(nums) // 2
       cur = TreeNode(nums[mid])
       cur.left = self.sortedArrayToBST(nums[:mid])
       cur.right = self.sortedArrayToBST(nums[mid+1:])
       return cur
     
def sortedArrayToBST(self, nums):
       """
      :type nums: List[int]
      :rtype: TreeNode
      """
       def dfs(start, end):
           if start == end:
               return None
           mid = start + (end - start) // 2
           cur = TreeNode(nums[mid])
           cur.left = dfs(start, mid)
           cur.right = dfs(mid+1, end)
           return cur
       
       if not nums:
           return None
       
       return dfs(0, len(nums))
     
def sortedArrayToBST(self, nums):
       """
      :type nums: List[int]
      :rtype: TreeNode
      """
       def helper(left, right):
           if left > right:
               return None
           if left == right:
               return TreeNode(nums[left])

           mid = (left + right) // 2
           node = TreeNode(nums[mid])
           node.left = helper(left, mid-1)
           node.right = helper(mid+1, right)
           return node
       
       if not nums:
           return None
       
       return helper(0, len(nums)-1)
原文地址:https://www.cnblogs.com/George1994/p/7482893.html