Red-Black tree and B-tree

红黑树和B-tree,是BST(二叉搜索树)里运用较多的两种树,

BST category

  • AVL tree
  • 2-3 tree
  • 2-3-4 tree
  • B-trees
  • Red-Black tree
  • skip list
  • treap

前言:red-black tree(红黑树)由于其存在的 color flips 和 rotation 两种操作,且case较多 ,因此不建议记住它每种case对应的操作,一般步骤是按照 B-tree、2-3-4 tree、red-black tree的步骤讲述,将 red-black tree 看成 2-3-4 tree 的等距二叉树版本,其中的 insertdelete 操作就能对照来看。

Usage

  • C++: std::map / std::set
  • Java: TreeMap / TreeSet
  • Haskell: Data.Map

BST

Balanced Search Tree

AVL tree

AVL tree is a self-balancing Binary Search Tree(BST) where the difference between heights of left and right subtrees cannot be more than one for all nodes.

  • AVL 树是在普通BST的基础上增加了子树的高度限制,以保证在查找过程中,不会出现斜树的情况
  • 时间复杂度则为 O(logn)

B-trees

2-3-4 tree

2-3-4 tree 是B-Trees的一种,节点内的keys的个数是 b-1 到 2b-1 即:1-3个,节点有2,3或4个孩子

Time complexity

以下分析 B Tree的 search、insert、delete complexity。

  • search complexity


    search_complexity

这里解释下 height 是 O(log_b n),从B tree 的 max height出发考虑:1+2(b-1)+2b(b-1)+... = n 可推出。

  • insert complexity


    insert_complexity
  • delete complexity


    delete_complexity

从上述可以看出对于 2-3-4 tree 而言,其 time complexity 总是为:O(log n),克服了普通 BST 因为 height 导致在增删改查的时候发挥不稳定的特点。

B+ Tree

B+ 树是在B 树基础上发展的数据结构,MySQL普遍使用B+树实现其索引结构。

  • 经典的B+树与B 树相比,一个m阶的B+树有k个子树的中间节点包含k个元素(不同于B树中的k-1个元素),每个元素不保存value,只用来索引,所有的(key,value)都保存在叶子节点中
  • 在经典的B+树基础上,对叶子节点本身进行指针的顺序链接,以加快范围的查询

优点: 由于非叶子节点中不承载数据,因此非叶子节点的每一层可以容纳更多的元素,降低了树的高度,减少了磁盘I/O的次数。并且因为叶子节点之间存在顺序链接的指针,遍历数据也会很简单。

Red-Black tree

红黑树是在查找数据结构里运用较多,典型的特点是在BST的基础上增加了树的平衡特性,即通过保证Black-height(路径上黑色节点的数目)相等,来保证树高<=2log(n+1)

red-black tree
  • 证明:h <= 2log(n+1)
    (将红黑树的红色节点合并到父亲黑色节点,得到2-3-4树,利用2-3-4树叶子节点与树高的关系推出来原树高的范围),这一推论由property3,4得出,也是决定R_B tree得到广泛运用的关键所在。

Insert&Delete

对R-B tree的插入与删除,需要调整树结构。整体分为三大步骤:

  • 找到插入位置,着色为红色;
  • 对父节点与祖父节点重新着色;
  • 对子树进行旋转调整;

伪代码

pseudocode.png

3 cases

  • case1


    case1.png
  • case2 ---> case3


    case2.png
  • case3


    case3.png

time complexity

各种时间复杂度同 2-3-4 tree 为:O(log n)

总结

summary

Refer:

更多有关算法方面的内容可参考本人博客:老香椿(https://laoxiangchun.cn/tags/Algorithm/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary...
    kanehe阅读 1,371评论 0 8
  • 二叉搜索树,平衡树,B,b-,b+,b*,红黑树 二叉搜索树 ​ 1.所有非叶子结点至多拥有两个儿子(Le...
    raincoffee阅读 3,866评论 3 18
  • 什么是数据结构? 数据结构就是计算机存储和组织数据的方式 基本用途:组织数据 常见操作:插入、删除、排序、搜索、遍...
    虫虫怪阅读 472评论 0 0
  • Queue什么是队列队列的种类Java 集合框架中的队列 Queue推荐文章 Set什么是 Set补充:有序集合与...
    哈哈大圣阅读 118评论 0 0
  • 树(tree)的基本知识 一.定义 树是一种抽象数据类型,或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构...
    337b94dc718f阅读 7,250评论 3 42