总是有朋友跟我说:我总是拿美女图片做封面
怀疑我有些流氓
我郑重声明:我就是想吸引流量而已
写篇文章不容易啊哈哈哈哈哈哈哈
瞧,我现在不就换了一张图片了吗?
108-将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
思路:
这道题其实亦不难,只要你get到关键点即可迅速解决。核心就是:取数组的中间元素作为根结点, 将数组分成左右两部分,对数组的两部分用递归的方法分别构建左右子树。剩下的就是用动态规划方法解决了,对了,如果有对动态规划方法不清楚的朋友可以先看看我之前写的一篇文章,相信会对你们有些感触。
https://blog.csdn.net/weixin_36431280/article/details/86616672
代码如下:
class Solution(object):
# 思路:取数组的中间元素作为根结点, 将数组分成左右两部分,对数组的两部分用递归的方法分别构建左右子树。
def sortedArrayToBST(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
if len(nums)==0:
return
# 取nums列表的中间下标值
mid_index = len(nums)//2
pNode = TreeNode(nums[mid_index])
pNode.left = self.sortedArrayToBST(nums[:mid_index])
pNode.right = self.sortedArrayToBST(nums[mid_index+1:])
return pNode
执行效率也是没的说,在90%以上。