108. Convert Sorted Array to Binary Search Tree

题目来源:

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/submissions/

自我感觉难度/真实难度:easy/easy
 
题意:

 把一个list转化为平衡树

分析:
 
自己的代码:
# 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
        """
        index=len(nums)
        if index==0:
            return None
        if index==1:
            return TreeNode(nums[0])
        
        cur=TreeNode(nums[index//2])
        cur.left =self.sortedArrayToBST(nums[:index//2])
        cur.right=self.sortedArrayToBST(nums[index//2+1:])
        return cur
        

 

代码效率/结果:

Runtime: 104 ms, faster than 88.84% of Python3 online submissions forConvert Sorted Array to Binary Search Tree.

 解题思路还是有的,但是总是一些细节出问题:1.返回值,一定要各处都符合需要的类型,这是是TreeNode    2.一个list需要分割成两半的时候,不仅是需要考虑list长度为0时,还有list长度为1的时候   3.看清楚list中index的取值,取值是不会拿掉原来数组中的值得

优秀代码:
class Solution:
    def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        return self.subSortedArrayToBST(nums,0,len(nums)-1)
        
    def subSortedArrayToBST(self,l,i,j):
        if l == [] :
            return []
        BST = TreeNode(l[(i+j+1)//2])
        if i <= (i+j+1)//2-1:
            BST.left = self.subSortedArrayToBST(l,i,(i+j+1)//2-1)
        if j >= (i+j+1)//2+1:
            BST.right = self.subSortedArrayToBST(l,(i+j+1)//2+1,j)
        return BST

 

 

代码效率/结果:

Runtime: 108 ms, faster than 71.50% of Python3 online submissions forConvert Sorted Array to Binary Search Tree.

完美的告诉你,应该如何去改写答案给的函数,使用自己定义的函数

 
自己优化后的代码:

 

 
反思改进策略:

1.提交之前要检查变量名称是否一致

2.对list分割取一般时,index要考虑等于0和1的情况

 

posted @ 2019-01-13 00:17  dgi  阅读(118)  评论(0编辑  收藏  举报