Python中的平衡二叉树


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

示例

输入-1:


输出

True

解释

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

输入-2:

              

输出

False

解释

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

解决此问题的方法

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

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

示例

在线演示

class treenode:
   def __init__(self, data):
      self.data = data
      self.left = self.right = None
# funtion to find the height of the left subtree and right subtree
class height:
   def __init__(self):
      self.height = 0
# function to check if the tree is balanced or not
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")

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

输出

Balanced

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

更新于:2021年2月23日

4K+ 浏览量

开启您的职业生涯

完成课程获得认证

开始学习
广告