写个红黑树

红黑树(Red-black tree)是一种平衡二叉查找树,具有以下性质:

  • 每个节点或是红色的,或是黑色的。
  • 根节点是黑色的。
  • 每个叶子节点都是黑色的空节点(NIL节点,叶子节点不存储数据)。
  • 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

这些性质能确保红黑树在最坏情况下仍然是平衡的,其时间复杂度为 O(log n)。

红黑树支持常用的树操作,如插入、删除、查找。插入和删除操作会破坏平衡性,但可以通过旋转等操作来保证红黑树的性质不变。

下面是红黑树的 Python 代码实现:

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

class RedBlackTree:
    def __init__(self):
        self.nil = Node(None, color='black')
        self.root = self.nil

    def left_rotate(self, x):
        y = x.right
        x.right = y.left
        if y.left != self.nil:
            y.left.parent = x
        y.parent = x.parent
        if x.parent == self.nil:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值