红黑树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Thank you!
2-3树
2-3 树优点是在最坏情况下仍有较好的性能。每 个操作都只会访问一条路径上的结点,所以任何查找或者 插入的成本都肯定不会超过树的高度 log2n 2-3 树的缺点是需要维护两种不同类型的结点,
查找和插入操作的实现需要大量的代码,而且它们所产生
的额外开销可能会使算法比标准的二叉查找树更慢。
红黑树就是用红链接表示 3- 结点的 2-3 树,那么 红黑树的插入、构造就可转化为 2-3树的问题。即用 2-3 树 来操作,得到结果,再把结果中的 3- 结点转化为红链接即 可,这样就可以简化2-3树的代码和操作。

特点:利用对树中的结点 “红黑着色”的要求,降低了
平衡性的条件,达到局部平衡,有着良好的最坏情况运 行时间,它可以在 O(log 2 n) 时间内做查找,插入和删除, 这里的n是树中元素的数目。
红黑树结点示例
typedef int key_t; typedef int data_t; typedef struct rb_node_t { key_t key; typedef enum color_t color_t color; { struct rb_node_t *parent; RED = 0, struct rb_node_t *left; BLACK = 1 struct rb_node_t *right, }color_t; }rb_node_t;
红黑树(Red-Black Tree)
目录
Biblioteka Baidu
一、红黑树的定义

Red-Black tree, 简称RB-Tree 它是在 1972 年由鲁道夫·贝尔发明的,他称之为“对称 二叉 B 树”,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的
红黑树的定义是满足下列条件的二叉查找树: 1.红链接均为左链接 2.没有任何一个结点同时和两条红链接相连 3. 该树是完美黑色平衡的,即任意空链接到根结点的路径 上的黑链接数量相同
二、红黑树的构建
S E A R C H X M P L
1.
A B
B
A C
B
2.
B
A A
C
3.
B
B
A
C
A
C
4.
四、红黑树的应用

典型的用途是:关联数组 C++ STL中的关联式容器:集合set、多重集合multiset、 映射map、多重映射multimap等均采用了红黑树的变体
• set<int> s; map<int, string>s

Java中的容器Set,Map的构造器TreeSet,TreeMap也使 用了红黑树 在Linux内核中,用于组织虚拟区间的数据结构也是红黑 树

根结点的黑高:树的黑高

设r是红黑树的黑高,h是红黑树的高度,n是节点个数 性质1:r ≤ h ≤ 2r 性质2:n ≥ 2r-1,最少是满二叉树 性质3:h ≤ 2log2(n+1) 结论: 含有 n个节点的红黑树的深度至多为 log 2 n+1,红黑树搜
索、插入、删除的时间复杂度为O(log2n)
A
C
B
A
B BL BR
C
BL
BR
删除就是局部去掉一个元素后,再在局部重新整 合的一个过程,所以删除本质就是插入。 在红黑树的实际应用的过程中是把要删除的元素 隐藏起来,当再次出现时改变键值。
三、红黑树的分析

结点的黑高bh(x):平衡性指标
• 从该结点到其子树中任意外部节点的任一条路径上的黑色结 点的数量 • 不包括该结点本身,包括叶结点!
相关文档
最新文档