二叉树的平衡

作者:热心市民鹿先生2024.02.04 14:24浏览量:8

简介:平衡二叉树是一种特殊的二叉树,其中任意节点的两个子树的高度差最多为1。本题要求判断给定的二叉树是否为平衡二叉树。

要判断一个二叉树是否为平衡二叉树,可以使用递归的方法。对于每个节点,我们比较其左右子树的高度。如果左右子树的高度差大于1,那么该节点所在的子树就不是平衡二叉树,整个二叉树也就不是平衡二叉树。如果所有节点都满足平衡条件,那么该二叉树就是平衡二叉树。
以下是使用Python实现的代码:

  1. class TreeNode:
  2. def __init__(self, val=0, left=None, right=None):
  3. self.val = val
  4. self.left = left
  5. self.right = right
  6. def isBalanced(root):
  7. if not root:
  8. return True
  9. height = getHeight(root)
  10. if height == -1:
  11. return False
  12. return True
  13. def getHeight(root):
  14. if not root:
  15. return 0
  16. left_height = getHeight(root.left)
  17. if left_height == -1:
  18. return -1
  19. right_height = getHeight(root.right)
  20. if right_height == -1:
  21. return -1
  22. if abs(left_height - right_height) > 1:
  23. return -1
  24. return max(left_height, right_height) + 1

在上述代码中,我们首先定义了一个TreeNode类来表示二叉树的节点。然后,我们定义了isBalanced函数来判断给定的二叉树是否为平衡二叉树。如果根节点为空,则返回True;否则,我们调用getHeight函数来获取根节点的高度。如果高度为-1,表示根节点所在的子树不是平衡二叉树,因此整个二叉树也不是平衡二叉树,返回False;否则,返回True。
getHeight函数用于计算给定节点的高度。如果节点为空,则高度为0。否则,我们递归计算左子树和右子树的高度,并判断它们之间的高度差是否大于1。如果大于1,则说明该节点所在的子树不是平衡二叉树,返回-1;否则,返回左右子树高度的最大值加1。
最后,我们在主程序中调用isBalanced函数来判断给定的二叉树是否为平衡二叉树,并输出结果。