📅  最后修改于: 2023-12-03 15:26:08.921000             🧑  作者: Mango
给定一个二叉树,判断其是否是高度平衡的二叉树。在本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。
为了判断一个二叉树是否是高度平衡的,我们需要计算树的高度,并比较其左右子树高度的差值是否超过 1。一个常见的方法是使用递归来遍历树,并对每个节点计算其左右子树的高度。如果左右子树的高度差超过 1,则说明这个二叉树不是高度平衡的。
为了计算树的高度,我们可以定义一个递归函数 height(root)
,其返回以 root
为根节点的树的高度。具体实现如下:
def height(root):
if root is None:
return 0
return max(height(root.left), height(root.right)) + 1
然后,我们可以编写一个递归函数 isBalanced(root)
,来判断一个二叉树是否是高度平衡的。具体实现如下:
def isBalanced(root):
if root is None:
return True
if abs(height(root.left) - height(root.right)) > 1:
return False
return isBalanced(root.left) and isBalanced(root.right)
在 isBalanced
函数中,如果当前节点 root
是空节点,那么它是高度平衡的。否则,我们计算其左右子树的高度,并比较它们的差值是否超过 1。如果超过 1,那么这个二叉树不是高度平衡的。否则,递归地判断左右子树是否也是高度平衡的。
通过一个递归函数 isBalanced
,我们可以判断一个二叉树是否是高度平衡的。其核心思想是计算每个节点的左右子树高度,并比较它们的差值是否超过 1。如果超过 1,那么这个二叉树不是高度平衡的。我们在递归时可以避免重复计算,提高程序的效率。