📜  数据结构 |二叉树 |问题 11(1)

📅  最后修改于: 2023-12-03 15:26:08.921000             🧑  作者: Mango

数据结构 | 二叉树 | 问题 11

问题描述

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

解决方法

为了判断一个二叉树是否是高度平衡的,我们需要计算树的高度,并比较其左右子树高度的差值是否超过 1。一个常见的方法是使用递归来遍历树,并对每个节点计算其左右子树的高度。如果左右子树的高度差超过 1,则说明这个二叉树不是高度平衡的。

为了计算树的高度,我们可以定义一个递归函数 height(root),其返回以 root 为根节点的树的高度。具体实现如下:

def height(root):
    if root is None:
        return 0
    return max(height(root.left), height(root.right)) + 1

然后,我们可以编写一个递归函数 isBalanced(root),来判断一个二叉树是否是高度平衡的。具体实现如下:

def isBalanced(root):
    if root is None:
        return True
    if abs(height(root.left) - height(root.right)) > 1:
        return False
    return isBalanced(root.left) and isBalanced(root.right)

isBalanced 函数中,如果当前节点 root 是空节点,那么它是高度平衡的。否则,我们计算其左右子树的高度,并比较它们的差值是否超过 1。如果超过 1,那么这个二叉树不是高度平衡的。否则,递归地判断左右子树是否也是高度平衡的。

总结

通过一个递归函数 isBalanced,我们可以判断一个二叉树是否是高度平衡的。其核心思想是计算每个节点的左右子树高度,并比较它们的差值是否超过 1。如果超过 1,那么这个二叉树不是高度平衡的。我们在递归时可以避免重复计算,提高程序的效率。