数据结构必知 --- 红黑树

2021-06-25  本文已影响0人  _code_x

1、什么是红黑树?

红黑树是一棵二叉搜索树,并且这棵树实现了弱平衡(严格的平衡是对于树中任意节点的左右子树高度差不超过1),确保没有一条路径会比其他路径长出两倍。弱平衡是指任意节点到到其子树中的叶节点所经过的黑色节点数相同,也可以称为黑色平衡(因为严格平衡的二叉搜索树AVL,维护成本太高,所以退而求其次)。

红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树最坏情况可以在O(log n)时间内完成查找,插入和删除操作。

2、为什么要引入红黑树?

红黑树是牺牲了严格的高度平衡的优越条件为代价(统计性能更高),它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。

相对于要求严格的AVL树来说,它的旋转次数少,插入数据分布比较好用AVL树,数据分布复杂用红黑树。

3、红黑树的五大特性

ps:注:红黑树引入了NIL节点,是一种虚拟节点,用于填充节点的左或右为空的位置,主要目的是便于判断从根节点到NIL节点,经过了多少黑节点。因此红黑树中的叶节点特指NIL节点,颜色必须是黑色。

4、红黑树的插入和删除

红黑树调整的两种方式:

添加操作(最多旋转两次):

(1)将红黑树当作一颗二叉查找树,将节点插入。

(2)将插入的节点着色为"红色"。ps:如果插入是黑色节点,破坏第五条性质。

(3)通过一系列的旋转或着色等操作,使之重新成为一颗红黑树(满足红黑树的五个性质)。

删除操作(最多旋转三次):

(1)将红黑树当作一颗二叉查找树,将节点删除。

(2)通过"旋转和重新着色"等一系列来修正该树,使之重新成为一棵红黑树。

ps:插入和删除设计很多情况,可以参考维基百科学习。

5、应用

上一篇 下一篇

猜你喜欢

热点阅读