Python 中的平衡二叉树

pythonserver side programmingprogramming更新于 2024/2/18 17:14:00

在二叉树中,每个节点包含两个子节点,即左子节点和右子节点。假设我们有一棵二叉树,我们需要检查这棵树是否平衡。如果左子树和右子树的高度差小于或等于"1",则称二叉树是平衡的。

示例

输入 1:


输出:

True

说明:

给定的二叉树为 [1,2,3, NULL, NULL, 6, 7]。其左子树与右子树的高度差为"1",因此是一棵高度平衡的树。

输入-2: 

                

输出:

False

解释:

给定的二叉树为 [1,2,3,4, NULL, NULL,NULL,5]。它的左子树和右子树的高度差大于"1",因此它不是高度平衡树。

解决此问题的方法

解决此问题的递归方法是找到左子树和右子树的高度,然后检查 (height(leftsubtree) - height(rightsubtree) <= 1) 是否成立,并相应地返回 True 或 False。然后,我们将递归检查二叉树的每个节点。

  • 输入二叉树的节点。
  • 定义一个函数来查找树的高度。
  • 一个布尔函数,用于递归检查左子树和右子树的高度差是否不超过"1",然后返回 True。
  • 返回结果。

示例

class treenode:
   def __init__(self, data):
      self.data = data
      self.left = self.right = None
# 函数用于查找左子树和右子树的高度
class height:
   def __init__(self):
      self.height = 0
# 函数用于检查树是否平衡
def isBalanced(root):
   lh = height()
   rh = height()
   if root is None:
      return True
   return (
      (abs(lh.height - rh.height) <= 1)
      and isBalanced(root.left)
      and isBalanced(root.right)
   )
root = treenode(1)
root.left = treenode(2)
root.right = treenode(3)
root.left.left = None
root.left.right = None
root.right.left = treenode(6)
root.right.right = treenode(7)
if isBalanced(root):
   print("Balanced")
else:
   print("Not Balanced")

运行上述代码将生成如下输出:

输出

平衡

给定二叉树 [1, 2, 3, NULL, NULL, 6, 7]。其左子树和右子树的高度差等于"1",因此它是一棵高度平衡的树。


相关文章