检查是否是平衡二叉树。
时间: 2023-06-08 09:08:28 浏览: 231
好的,我能够回答您的问题。要检查一棵二叉树是否平衡,需要判断每个节点的左右子树的深度差是否大于1。如果任何一个节点的深度差大于1,则该二叉树不是平衡的。需要遍历二叉树的每个节点,因为每个节点都是二叉树的一个子树,要计算该节点的深度差是否大于1。这个问题可以使用递归方法解决,对于每个节点只需要计算深度并比较深度差是否大于1即可。
相关问题
编写一个递归函数,检查二叉树是否为平衡二叉树
在Python中,我们可以编写一个名为is_balanced
的递归函数来检查一个给定的二叉树是否是平衡二叉树。平衡二叉树是指每个节点的左右子树的高度差不超过1的二叉搜索树。下面是这个函数的基本实现:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def height(node):
if node is None:
return 0
else:
# 计算左子树和右子树的高度,取较大值加1作为当前节点的高度
left_height = height(node.left)
right_height = height(node.right)
return max(left_height, right_height) + 1
def is_balanced(root):
if root is None:
return True
# 获取根节点的高度
height_diff = abs(height(root.left) - height(root.right))
# 如果高度差超过1,说明不是平衡二叉树
if height_diff > 1:
return False
else:
# 对左右子树分别递归检查
return is_balanced(root.left) and is_balanced(root.right)
# 测试用例
# 构建一个不平衡的二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
print(is_balanced(root)) # 输出:False
# 构建一个平衡的二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
print(is_balanced(root)) # 输出:True
判断是否是平衡二叉树
判断一棵二叉树是否为平衡二叉树,意味着每个节点的两个子树的高度差不超过1。这通常通过递归的方式来实现。对于一个给定的节点,首先检查其左右子树是否存在,然后递归地分别计算左子树和右子树的高度。若这两个高度之差的绝对值大于1,则该二叉树不是平衡二叉树;否则,继续检查这两个子树是否都是平衡二叉树。
这里是一个简单的伪代码示例:
def isBalanced(root):
if root is None:
return True # 空树视为平衡
left_height = height(root.left)
right_height = height(root.right)
if abs(left_height - right_height) > 1:
return False # 高度差大于1,不平衡
return isBalanced(root.left) and isBalanced(root.right)
def height(node):
if node is None:
return 0
else:
left_height = height(node.left)
right_height = height(node.right)
return max(left_height, right_height) + 1
在这个例子中,isBalanced
函数负责全局判断,height
函数则用于计算单个节点的高度。
阅读全文
相关推荐













