红黑树(Red-Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构。它具有以下几个特点和优势:
std::map
和std::set
。红黑树是一种特定类型的自平衡二叉查找树,与其他自平衡树(如AVL树)相比,它在插入和删除操作中需要的旋转次数较少。
TreeMap
和TreeSet
。std::map
和std::set
。在Linux内核中,红黑树被广泛用于以下场景:
以下是一个简单的红黑树插入操作的伪代码示例:
class Node:
def __init__(self, key, color='red', left=None, right=None, parent=None):
self.key = key
self.color = color
self.left = left
self.right = right
self.parent = parent
def insert(root, key):
node = Node(key)
root = bst_insert(root, node)
fix_insert(root, node)
return root
def bst_insert(root, node):
if root is None:
return node
if node.key < root.key:
root.left = bst_insert(root.left, node)
root.left.parent = root
else:
root.right = bst_insert(root.right, node)
root.right.parent = root
return root
def fix_insert(root, node):
while node.parent and node.parent.color == 'red':
if node.parent == node.parent.parent.left:
uncle = node.parent.parent.right
if uncle and uncle.color == 'red':
node.parent.color = 'black'
uncle.color = 'black'
node.parent.parent.color = 'red'
node = node.parent.parent
else:
if node == node.parent.right:
node = node.parent
left_rotate(root, node)
node.parent.color = 'black'
node.parent.parent.color = 'red'
right_rotate(root, node.parent.parent)
else:
uncle = node.parent.parent.left
if uncle and uncle.color == 'red':
node.parent.color = 'black'
uncle.color = 'black'
node.parent.parent.color = 'red'
node = node.parent.parent
else:
if node == node.parent.left:
node = node.parent
right_rotate(root, node)
node.parent.color = 'black'
node.parent.parent.color = 'red'
left_rotate(root, node.parent.parent)
root.color = 'black'
def left_rotate(root, x):
y = x.right
x.right = y.left
if y.left:
y.left.parent = x
y.parent = x.parent
if not x.parent:
root = y
elif x == x.parent.left:
x.parent.left = y
else:
x.parent.right = y
y.left = x
x.parent = y
def right_rotate(root, y):
x = y.left
y.left = x.right
if x.right:
x.right.parent = y
x.parent = y.parent
if not y.parent:
root = x
elif y == y.parent.right:
y.parent.right = x
else:
y.parent.left = x
x.right = y
y.parent = x
这个示例代码展示了红黑树的插入操作,包括基本的二叉查找树插入和后续的红黑树平衡调整。
领取专属 10元无门槛券
手把手带您无忧上云