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.