判断是否是平衡二叉树代码
时间: 2024-09-06 17:00:22 浏览: 54
平衡二叉树(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,则返回该节点的高度。
阅读全文