红黑树边学边做--python3实现与可视化

本文介绍了红黑树的性质和应用,详细讲述了如何使用Python3实现红黑树并进行可视化。通过安装Python环境和graphviz模块,实现了红黑树的插入操作,分析了插入过程的关键步骤,包括节点比较、插入调整等。文章还探讨了不同插入情况下的旋转操作,以保持红黑树的平衡。最后鼓励读者尝试实现删除等其他操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.红黑树性质和应用

  1. 每个节点或是红色的,或是黑色的

  2. 根节点是黑色的

  3. 每个叶节点(NIL)是黑色的

  4. 如果一个节点是红色的,则它的两个子节点都是黑色的

  5. 对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

这五条性质决定了红黑树最长的分支的深度最多是最短分支深度的2倍,因为最短的就是每个节点都是黑的,最长的最多就是红黑相间嘛。这使得红黑树始终处于一个大致平衡的状态,保证了性能。
总而言之,红黑树的最大特点就是即使在最坏情况下,插入,查找,删除等操作的时间复杂度仍然都是O(logn),并且有多少数据就占用多少内存,相比hashmap更为节省内存。

二.红黑树python3实现与可视化

1).准备工作

首先需要安装python3,我这里的环境是windows7,python3.6。之后需要安装一个可视化模块graphviz,详情参照上一篇博客
https://blog.youkuaiyun.com/qq_35603331/article/details/81591949

2).python实现与讲解

首先直接贴代码

1.python实现

BLACK = 0
RED = 1
from graphviz import Digraph


class Rbtree:
    root = None
    name = None

    def __init__(self, name='rbtree'):
        self.name = name

    def insert(self, point):
        if self.root is None:
            point.color = BLACK
            self.root = point
            return
        self.root.add_child(point)

    def find(self, key):
        if self.root is None:
            print('该树为空树!')
            return None
        return self.root.find(key)

    # def select(self, point):
    # def print(self):
    def view(self):
        graph = Digraph(self.name)
        if self.root is not None:
            self.root.draw(graph)
            graph.view(cleanup=True)


class RbPoint:
    parent = None
    left = None
    right = None
    color = -1  # 节点颜色 0 黑 1红
    key = None
    tree = None

    def __init__(self, key, tree):
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值