110. 平衡二叉树(Python)

题目

难度:★★☆☆☆
类型:二叉树

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

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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即可。这里我们可以使用【题目104. 二叉树的最大深度】来计算每一棵子树的最大深度,通过递归遍历判断各个结点是否平衡:

  1. 当输入的根结点为空时,该二叉树平衡;

  2. 调用本函数进行递归,当输入结点的左右子树均为平衡二叉树,且最大深度差不大于1时,二叉树平衡;

  3. 返回结果。

class Solution:

    def isBalanced(self, root):

        def height(root):
            """
            获得以root为根结点的树的最大深度
            :param root:
            :return:
            """
            if root is None:
                return 0
            return max(height(root.left), height(root.right)) + 1

        def is_balanced(root):
            """
            判定是否为平衡二叉树
            :param root:
            :return:
            """
            if root is None:        # 如果是空树
                return True         # 一定是平衡二叉树

            # 满足平衡二叉树的条件:左右子树平衡,左右子树最大深度差值不大于1
            return is_balanced(root.left) and is_balanced(root.right) and \
                   abs(height(root.left)-height(root.right)) <= 1

        return is_balanced(root)

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(110. 平衡二叉树(Python))