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

这道题目目的是将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。所谓的平衡二叉树,是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。如图所示:
题目
拿到题目似乎无从下手,要建立一个平衡二叉搜索树,我们可以联想到快速排序的算法思想。因为数组是有序的,首先我们可以找到一个中位数,然后分别从左右子树进行递归建立二叉树。代码如下所示:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if not nums:
            return None
        else:
        	# 找中位数
            mid = len(nums)//2
            root = TreeNode(nums[mid])
            # 左子树
            numsLeft = nums[:mid]
            # 右子树
            numsRight = nums[mid+1:]
            root.left = self.sortedArrayToBST(numsLeft)
            root.right = self.sortedArrayToBST(numsRight)
        return root

通过递归我们就可以将有序的数列进行平衡搜索二叉树的建立了,以此类推任意数组我们都可以先进行排序操作然后再通过递归来建立平衡搜索二叉树,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值