返回

指点迷津:平衡二叉树判断技巧,掘金3月闯关活动不容错过!

闲谈

剑指Offer 55 - II. 判定平衡二叉树

哈喽,各位程序员小伙伴们!今天,我们继续剑指Offer系列,一起来探索一道关于平衡二叉树判断的经典问题——Offer 55 - II. 判定平衡二叉树。

平衡二叉树是一种非常重要的数据结构,它具有很多优良的性质,比如查找、插入和删除操作的时间复杂度都是O(log n)。那么,如何判断一颗二叉树是否是平衡二叉树呢?

平衡二叉树的定义

首先,我们需要了解平衡二叉树的定义。平衡二叉树是指一棵二叉树中任意节点的左右子树的深度相差不超过1。也就是说,平衡二叉树的左右子树的高度必须尽可能地平衡。

判断平衡二叉树的方法

判断平衡二叉树的方法有很多,最常见的方法是递归法。具体步骤如下:

  1. 对于一颗二叉树的根节点,首先计算其左右子树的高度。
  2. 如果左右子树的高度差大于1,则该二叉树不是平衡二叉树,直接返回false。
  3. 否则,分别递归地判断左右子树是否为平衡二叉树。
  4. 如果左右子树都是平衡二叉树,则该二叉树也是平衡二叉树,返回true。

代码实现

def isBalanced(root):
    """
    判断一颗二叉树是否是平衡二叉树。

    Args:
        root: 二叉树的根节点。

    Returns:
        如果二叉树是平衡二叉树,返回True,否则返回False。
    """

    if not root:
        return True

    left_height = maxDepth(root.left)
    right_height = maxDepth(root.right)

    if abs(left_height - right_height) > 1:
        return False

    return isBalanced(root.left) and isBalanced(root.right)


def maxDepth(root):
    """
    计算二叉树的最大深度。

    Args:
        root: 二叉树的根节点。

    Returns:
        二叉树的最大深度。
    """

    if not root:
        return 0

    left_depth = maxDepth(root.left)
    right_depth = maxDepth(root.right)

    return max(left_depth, right_depth) + 1

掘金3月闯关活动

最后,别忘了参与「掘金3月闯关活动」的挑战!活动期间,你将有机会赢取丰厚的奖励,包括掘金周边、京东卡和现金红包。快来参与,展示你的编程实力吧!

活动传送门:掘金3月闯关活动