📜  算法|递归问题4(1)

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

算法|递归问题4

简介

递归是一种非常强大的程序设计技巧,递归函数可以大大简化程序的逻辑结构,同时还能避免一些繁琐的循环操作。本文将介绍递归问题的第四个经典问题:判断一棵二叉树是否为平衡二叉树。

问题

给定一棵二叉树的根节点,编写一个函数来判断这棵二叉树是否为平衡二叉树。如果一棵二叉树的每个节点的左右子树的高度差都不超过1,那么它就是一棵平衡二叉树。

解法

这道问题可以使用递归来解决。我们可以先计算根节点的左右子树的高度差,如果超过1,则说明这不是一棵平衡二叉树。否则,我们递归地判断左右子树是否是平衡二叉树。

代码片段如下:

class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        if not root:
            return True
        left_height = self.getHeight(root.left)
        right_height = self.getHeight(root.right)
        if abs(left_height - right_height) > 1:
            return False
        return self.isBalanced(root.left) and self.isBalanced(root.right)

    def getHeight(self, root: TreeNode) -> int:
        if not root:
            return 0
        left_height = self.getHeight(root.left)
        right_height = self.getHeight(root.right)
        return max(left_height, right_height) + 1
总结

这道问题是一道经典的递归问题,掌握了递归技巧后,可以轻松的解决诸如此类的问题。同时,本题还考察了对二叉树的理解,对计算树的高度的掌握,是一道非常有价值的题目。