leetcode修炼------108、110题

第108题:

"

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

"

题目大意:给你一个按照升序排序的数组,你将它转换为平衡二叉树。

题目链接

解题思路:首先明确平衡二叉树的定义:

(1)它是一棵二叉排序树,即根节点的值大于左子树节点的值,小于右子树节点的值。

(2)除了性质1之外,还要求每棵树的左右子树的深度之差不能超过1

其实说白了,要满足条件(2),我们只是需要将已经排序好的数组进行二分即可,这样既能满足条件(1)也能满足条件(2),个人在做试题的时候,主要到考察到树的部分的时候,一定要多往递归方向去做。

下面就直接给出代码了:

class Solution:
    def sortedArrayToBST(self, nums: list(int)) -> TreeNode:
        if nums is None or len(nums)==0:
            return None
        return self.fun(nums,0,len(nums)-1)

    def fun(self,nums,min,max)->TreeNode:
        if min>max:
            return None
        mid=(min+max)//2
        node=TreeNode(nums[mid])
        node.left=self.fun(nums,min,mid-1)
        node.right=self.fun(nums,mid+1,max)
        return node

第110题:

"

Given a binary tree, determine if it is height-balanced.

"

题目大意:给出一棵二叉树,判断它是不是平衡二叉树

题目链接

解题思路:关于平衡二叉树,就不继续说了,可以参考上面的内容,但是这题没有第一个要求,只是需要判断它是不是高度平衡的,只需要满足条件(2)即可,本题主要是得到树的高度的计算,也就是可以直接计算树的高度:采用递归的思想,先计算左子树的高度,再计算右子树的高度,相比取最大的数,然后加上1(根节点是第一层)

class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        import math
        if not root:
            return True
        else:
            left_height=self.height(root.left)
            right_height=self.height(root.right)
            if math.fabs(left_height-right_height)>1:
                return False
            else:
                return self.isBalanced(root.left) and self.isBalanced(root.right)

    def height(self, root:TreeNode)->int:
        if not root:
            return 0
        left_height=self.height(root.left)
        right_height=self.height(root.right)
        if left_height>right_height:
            return left_height+1
        else:
            return right_height+1

猜你喜欢

转载自blog.csdn.net/sir_TI/article/details/88320149