📅  最后修改于: 2023-12-03 15:10:55.921000             🧑  作者: Mango
红黑树是一种自平衡二叉查找树,在操作中自动保持树的平衡。它是一种复杂的数据结构,但其自平衡的特性使得它保持了较快的查询效率。
红黑树是一种具有以下特性的二叉树:
如果一棵二叉树中所有的非叶子节点的左右子树的高度差都小于等于1,则该树被称为高度平衡的二叉树。
高度平衡的二叉树可以保证在最坏情况下的查询时间复杂度为O(log n)。
我们可以使用递归的方式来检查一棵二叉树是否像红黑树一样高度平衡。
首先我们需要编写一个函数来获取一棵二叉树的高度:
def getHeight(node):
if not node:
return 0
return max(getHeight(node.left), getHeight(node.right)) + 1
这个函数会返回一棵树的高度。
接下来,我们需要编写一个函数来检查一棵二叉树是否高度平衡:
def isBalanced(node):
if not node:
return True
leftHeight = getHeight(node.left)
rightHeight = getHeight(node.right)
if abs(leftHeight - rightHeight) <= 1 and isBalanced(node.left) and isBalanced(node.right):
return True
return False
这个函数会递归检查二叉树的每个节点,如果它的左右子树的高度差小于等于1,并且它的左右子树都是高度平衡的二叉树,那么它就是一棵高度平衡的二叉树。
我们可以使用这个函数来检查一棵二叉树是否像红黑树一样高度平衡。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def getHeight(node):
if not node:
return 0
return max(getHeight(node.left), getHeight(node.right)) + 1
def isBalanced(node):
if not node:
return True
leftHeight = getHeight(node.left)
rightHeight = getHeight(node.right)
if abs(leftHeight - rightHeight) <= 1 and isBalanced(node.left) and isBalanced(node.right):
return True
return False
# Test
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(isBalanced(root)) # True
以上代码实现了一个简单的二叉树,并使用 isBalanced()
函数进行了高度平衡检查。