📅  最后修改于: 2023-12-03 15:28:48.615000             🧑  作者: Mango
本次问题为门|门 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)。
以上就是题目描述以及两种解决思路。对于面试官来说,除了考察程序员的代码能力,也能够测试其分析问题和解决问题的能力。而对于程序员来说,也能够掌握针对二叉树相关问题的解题思路。