LeetCode108——Convert Sorted Array to Binary Search Tree

题目:

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

  

理解:

给出一个各个元素按升序排列好的数组,将它变为一个平衡二叉树。本题平衡二叉树的定义是:每一个节点的左右两个分支的深度差不超过1。

 

例子:

Given the sorted array: [-10,-3,0,5,9],

One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:

      0
     / \
   -3   9
   /   /
 -10  5


原始解题思路:

拿出纸笔推一下思路,这题肯定要用递归了,先将数组的中点找到,也就是二叉树的根结点,然后递归把左边右边的根结点再找到,本质上是深度优先搜索。

python代码:

# 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):
        if len(nums) == 0:
            #print("数组为0")
            return None
        mid = len(nums) // 2  # 取整
        print(nums[mid])
        result = TreeNode(nums[mid])
        result.left = self.sortedArrayToBST(nums[:mid])
        result.right = self.sortedArrayToBST(nums[mid + 1:])

        #print(result.val,result.left,result.right)
        return result


if __name__ == '__main__':
    num1 = [-10, -3, 0, 5, 9]
    Main = Solution()
    Main.sortedArrayToBST(num1)

  

验证结果:

Runtime:  72 ms, faster than 24.34% of Python3 online submissions for Convert Sorted Array to Binary Search Tree.
Memory Usage:  15.4 MB, less than 5.70% of Python3 online submissions for Convert Sorted Array to Binary Search Tree.
 
速度太慢了,看来本题优化的空间还很大,首先是把第一个len函数删除,直接改为if not nums来用,结果速度好多了,这说明python自带的len函数真的很费时间啊,以后记得能少用就少用。
python代码:
class Solution:

    def sortedArrayToBST(self, nums):
        if not nums:
            return None
        mid = len(nums) // 2  # 取整
        result = TreeNode(nums[mid])
        result.left = self.sortedArrayToBST(nums[:mid])
        result.right = self.sortedArrayToBST(nums[mid + 1:])
        return result

  

结果:
Runtime:  64 ms, faster than 86.35% of Python3 online submissions for Convert Sorted Array to Binary Search Tree.
Memory Usage:  15.4 MB, less than 5.70% of Python3 online submissions for Convert Sorted Array to Binary Search Tree.
 

 

转载于:https://www.cnblogs.com/Hangingter/p/10745494.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值