【LeetCode 简单题】24-平衡二叉树

声明:

今天是第24道题。给定一个二叉树,判断它是否是高度平衡的二叉树。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

题目:给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

 示例 1:

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7 

返回True

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

       1
      / \
     2   2
    / \
   3   3
  / \
 4   4 

返回False

解法1。一定要理清题意,对每一个节点下的子树高度差都不能大于1,不仅仅是父节点要满足此,所有后面跟了子节点的都要验证,所以在isBalanced里如果当前子树满足则返回True,继续递归,直到所有都满足就返回True。

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

class Solution:
    def getHeight(self,root):   
        if not root:
            return 0
        left_height = self.getHeight(root.left)
        right_height = self.getHeight(root.right)
        return 1+max(left_height,right_height)

    def isBalanced(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if not root:
            return True
         # 计算左右子树的高度并返回更高的高度,check该子树是否是平衡的,是的话返回True,然后继续递归
        left = self.getHeight(root.left)    
        right = self.getHeight(root.right)
        if abs(left-right) > 1:
            return False
        return self.isBalanced(root.left) and self.isBalanced(root.right)
        
        

解法2。可以把过程再简化一下,在isBalanced内部定义一个计算子树高度的递归函数,一旦发现左右子树之差大于1或者上一轮验证的左右子树之差大于1则返回-1,最后判断的返回条件是调用此函数后返回值是否为1,是则返回False,否则返回True。

class Solution:
    def isBalanced(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        def height(node):
            if not node:
                return 0
            left_height = height(node.left)
            right_height = height(node.right)
            if left_height == -1 or right_height == -1 or abs(left_height-right_height) > 1:
                return -1
            return max(left_height,right_height)+1
        return height(root) != -1
        

结尾

解法1:https://blog.csdn.net/u010342040/article/details/80340434

解法2:https://blog.csdn.net/qq_34364995/article/details/80427221

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/82780824