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

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

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

问题描述

给定一个二叉树,编写一个函数判断该树是否是平衡二叉树。若该树是平衡二叉树,返回 true ;否则,返回 false

平衡二叉树定义

平衡二叉树(Balanced Binary Tree),简称 AVL 树,是一种二叉搜索树,其中每个节点的左右子树的高度之差的绝对值不超过 1。

解题思路

本题可以通过递归的方式来判断二叉树是否平衡。对于每个节点,我们递归计算其左右子树的高度,并比较左右子树的高度差是否小于等于 1,如果小于等于 1 则继续递归判断该节点的左右子树是否平衡。

这里我们需要一个计算树高度的函数,我们可以使用递归计算该节点左右子树的最大高度,然后加上该节点的高度 1。

代码实现
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        def get_height(node: TreeNode) -> int:
            if not node:
                return 0
            
            left_height = get_height(node.left)
            right_height = get_height(node.right)
            
            if abs(left_height - right_height) > 1:
                return -1
            
            return max(left_height, right_height) + 1
        
        return get_height(root) != -1

以上是 Python 语言的实现,时间复杂度为 O(N),其中 N 是二叉树的节点数,空间复杂度取决于递归树的深度,在最差情况下可能达到 O(N)。