logo

从题目解析到代码实现:平衡二叉树的判断

作者:demo2024.02.17 20:47浏览量:12

简介:平衡二叉树是一种特殊的二叉树,其中任意节点的左右子树的高度差不超过1。本篇文章将通过解析题目、明确问题、给出解题思路和代码实现,帮助读者理解如何判断一棵二叉树是否是平衡二叉树。

在LeetCode 110题中,我们需要判断一棵给定的二叉树是否是平衡二叉树。平衡二叉树是一种特殊的二叉树,其中任意节点的左右子树的高度差不超过1。也就是说,从根节点到任意叶子节点的最长路径和最短路径的差值不超过1。

首先,我们需要明确问题的关键点:判断二叉树是否平衡,也就是判断从根节点到叶子节点的最长路径和最短路径的差值是否不超过1。

解题思路:

  1. 定义一个辅助函数maxDepth,用于计算二叉树的最大深度。
  2. 对于每一个节点,递归调用maxDepth函数计算其左子树和右子树的最大深度。
  3. 如果当前节点的左右子树的最大深度差值大于1,那么说明这棵二叉树不是平衡的,直接返回false。
  4. 否则,继续递归判断其左右子树是否平衡。
  5. 如果所有节点都通过了平衡性检查,那么这棵二叉树就是平衡的,返回true。

下面是对应的Python代码实现:

  1. class TreeNode: # 定义二叉树节点类
  2. def __init__(self, x):
  3. self.val = x
  4. self.left = None
  5. self.right = None
  6. def maxDepth(root): # 计算二叉树最大深度
  7. if root is None: # 如果节点为空,返回0
  8. return 0
  9. else:
  10. left_depth = maxDepth(root.left) # 递归计算左子树深度
  11. right_depth = maxDepth(root.right) # 递归计算右子树深度
  12. return max(left_depth, right_depth) + 1 # 返回左右子树深度的较大值加1
  13. def isBalanced(root): # 判断二叉树是否平衡
  14. if root is None: # 如果节点为空,返回True
  15. return True
  16. else:
  17. left_depth = maxDepth(root.left) # 递归计算左子树深度
  18. right_depth = maxDepth(root.right) # 递归计算右子树深度
  19. if abs(left_depth - right_depth) > 1: # 如果左右子树深度差值大于1,返回False
  20. return False
  21. else: # 否则递归判断左右子树是否平衡
  22. return isBalanced(root.left) and isBalanced(root.right)

这段代码中,我们首先定义了一个TreeNode类来表示二叉树的节点。然后,我们定义了两个辅助函数maxDepthisBalancedmaxDepth函数用于计算二叉树的最大深度,而isBalanced函数则用于判断二叉树是否平衡。在isBalanced函数中,我们首先检查当前节点是否为空,如果为空则返回True。然后,我们递归计算当前节点的左子树和右子树的最大深度,并检查它们的差值是否大于1。如果差值大于1,则说明这棵二叉树不是平衡的,返回False。否则,我们递归地检查左子树和右子树是否平衡,只有当它们都平衡时才返回True。

通过这种方式,我们可以有效地判断一棵给定的二叉树是否是平衡的。希望这篇文章能帮助你更好地理解如何解决这个问题。

相关文章推荐

发表评论