一.红黑树性质和应用
每个节点或是红色的,或是黑色的
根节点是黑色的
每个叶节点(NIL)是黑色的
如果一个节点是红色的,则它的两个子节点都是黑色的
对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。
这五条性质决定了红黑树最长的分支的深度最多是最短分支深度的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):