📜  门|门 IT 2008 |问题 19(1)

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

门|门 IT 2008 |问题 19

本次问题为门|门 IT 2008年的第19个问题,是一道面向程序员的技术问题。

题目描述

给定一个二叉树,判断其是否为平衡二叉树。平衡二叉树的定义如下:

任意节点的左右子树的高度差不超过1。

解决思路

这道问题可以用递归的方法解决。首先需要定义一个函数,来计算二叉树的深度:

def get_depth(root):
    if not root:
        return 0
    return max(get_depth(root.left), get_depth(root.right)) + 1

接下来,我们可以使用递归的方法来判断二叉树是否为平衡二叉树:

def is_balanced(root):
    if not root:
        return True
    if abs(get_depth(root.left) - get_depth(root.right)) > 1:
        return False
    return is_balanced(root.left) and is_balanced(root.right)

因为每个节点的判断都需要计算一次深度,所以时间复杂度是O(nlogn),其中n为节点个数。可以看出,这种方法比较简单,但效率不高。

还有一种更高效的方法,是在计算每个节点的深度时,同时判断左右子树是否满足平衡二叉树的定义。这样每个节点只需要处理一次就可以了,时间复杂度是O(n)。

总结

以上就是题目描述以及两种解决思路。对于面试官来说,除了考察程序员的代码能力,也能够测试其分析问题和解决问题的能力。而对于程序员来说,也能够掌握针对二叉树相关问题的解题思路。