检查是否是平衡二叉树。
时间: 2023-06-08 22:08:28 浏览: 202
好的,我能够回答您的问题。要检查一棵二叉树是否平衡,需要判断每个节点的左右子树的深度差是否大于1。如果任何一个节点的深度差大于1,则该二叉树不是平衡的。需要遍历二叉树的每个节点,因为每个节点都是二叉树的一个子树,要计算该节点的深度差是否大于1。这个问题可以使用递归方法解决,对于每个节点只需要计算深度并比较深度差是否大于1即可。
相关问题
判断是否是平衡二叉树
判断一棵二叉树是否为平衡二叉树,意味着每个节点的两个子树的高度差不超过1。这通常通过递归的方式来实现。对于一个给定的节点,首先检查其左右子树是否存在,然后递归地分别计算左子树和右子树的高度。若这两个高度之差的绝对值大于1,则该二叉树不是平衡二叉树;否则,继续检查这两个子树是否都是平衡二叉树。
这里是一个简单的伪代码示例:
```python
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`函数则用于计算单个节点的高度。
判断是否是平衡二叉树代码
平衡二叉树(Balanced Binary Tree),又被称为AVL树,是一种特殊的二叉搜索树。在AVL树中任何节点的两个子树的高度最大差别为1,这样的二叉树就称为平衡二叉树。平衡二叉树的查找操作的效率与普通二叉搜索树相同,但插入和删除操作则需要通过旋转来保持树的平衡。
以下是一个判断二叉树是否为平衡二叉树的Python代码示例:
```python
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def isBalanced(root):
"""
:type root: TreeNode
:rtype: bool
"""
def checkHeight(node):
# 如果节点为空,返回高度为0
if not node:
return 0
# 递归计算左右子树的高度
left_height = checkHeight(node.left)
if left_height == -1:
return -1
right_height = checkHeight(node.right)
if right_height == -1:
return -1
# 如果左右子树高度差大于1,则不是平衡树
if abs(left_height - right_height) > 1:
return -1
# 返回当前节点的高度
return max(left_height, right_height) + 1
# 从根节点开始检查,如果高度为-1,说明不是平衡树
return checkHeight(root) != -1
# 构建一棵树用于测试
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(2)
root.left.left = TreeNode(3)
root.left.right = TreeNode(3)
root.right.left = TreeNode(4)
root.right.right = TreeNode(4)
# 判断是否为平衡二叉树
print(isBalanced(root)) # 应该输出 False,因为存在两个节点的子树高度差为2
```
这段代码中,`isBalanced` 函数用于判断一个二叉树是否是平衡二叉树。它通过辅助函数`checkHeight`来递归地计算每个节点的高度,如果在计算过程中发现任何节点的左右子树高度差超过1,则该树不是平衡的,并立即返回-1作为高度。如果所有节点的左右子树高度差都不超过1,则返回该节点的高度。
阅读全文