红黑树

本文内容参考以下: 

1、且听_风吟【动画演示!红黑树解析】https://blog.csdn.net/qq_26803795/article/details/106258368


 

由于java8在HashMap底层使用RBTree取代了链表,性能得到了提升,因此红黑树获得了更多的关注。

下面我们慢慢来学习一些红黑树

什么是二叉查找树?

二叉查找树,Binary Search Tree,BST,一颗二叉树,满足一下特性:

1、某节点的左子树节点值均小于该节点值,右子树节点值均大于该节点值;

2、左右子树也都是BST

 

BST的倾斜

正常情况下,二叉查找树增删查改的时间复杂度为O(logN)。

但二叉查找树在生成时,是非常容易失衡的,发生倾斜,时间复杂度变为O(N),查询效率变低。

怎么解决倾斜?

每次插入或者删除数据时,对树结构进行旋转,使其维持logN的高度,保证查询的稳定性。

于是诞生了平衡二叉查找树(Balanced BST)两款具有代表性的平衡树分别为AVL树和红黑树

 

什么是红黑树?

红黑树,Red Black Tree,RBTree,一种自平衡二叉查找树。

RBT要求,插入或删除后,树必须满足以下特性:

1、节点非红即黑

2、根黑

3、叶黑,叶节点为Null节点

3、红色的两个子都是黑色(根到叶子的路径上不能出现连续2个红色)

4、任一节点到其每个叶子的所有路径上都包含相同数目的黑色节点

所以,根到叶子的最长路径不多于最短路径的两倍,因为最短路径是全部为黑色节点的路径,最长路径是红黑相间的路径。

那么,可以有结论:

1、红黑树并不是高度的平衡树(一棵空树或它的左右两个子树的高度差的绝对值不超过1)

2、红黑树大致上是平衡的,在最坏情况下也是高效的。

追求树的平衡是为了提升查询效率(变快),但如果追求绝对的平衡需要对树进行大幅的调整(变慢),红黑树是一种折中方案。

 

为了维持RBT的特性,RBT定义了两个重要的操作:

1、rotation:旋转,这是树达到平衡的关键

rotation之左旋

2、recolor :重新标记,黑色或红色

RBT recolor演示

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读