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

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

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

问题描述

给定一个二叉树,请判断它是否是高度平衡的二叉树。一个高度平衡二叉树是指每个节点的两个子树的深度差不超过 1。

实现思路

我们可以使用递归的方式来判断一个二叉树是否是高度平衡的二叉树。

对于一个节点,我们可以分别递归地求出其左子树和右子树的深度,如果左右子树的深度差大于 1,说明该节点不是高度平衡的,返回 false,否则继续递归它的左右子节点。

具体实现可以参考下面的代码:

class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        # 递归函数,判断该节点是否是平衡二叉树,并返回其深度
        def helper(node):
            if not node: 
                return 0
            left = helper(node.left) # 左子树的深度
            if left == -1: # 左子树不是平衡二叉树
                return -1
            right = helper(node.right) # 右子树的深度
            if right == -1: # 右子树不是平衡二叉树
                return -1
            return max(left, right) + 1 if abs(left - right) <= 1 else -1

        # 判断根节点是否是平衡二叉树
        return helper(root) != -1
复杂度分析
  • 时间复杂度:$O(N)$,其中 N 是二叉树的节点个数。对于每个节点,我们最多会遍历其左右子树各一次。
  • 空间复杂度:$O(N)$,其中 N 是二叉树的节点个数。空间复杂度主要取决于递归调用的层数,最坏情况下,二叉树的高度等于节点个数,空间复杂度为 $O(N)$。