跳转到内容
返回

《学习JavaScript数据结构与算法》笔记---红黑树

什么是红黑树

1.为了解决二叉搜索树出现非平衡树的情况而出现的优化方案;2.当插入一个节点使树不平衡时,通过一些规则和一些处理方式来让树保持平衡;这个平衡后的树叫做红黑树

为什么需要红黑树?

1.假如现在要向一颗BST插入10 9 8 7 6 5 4 3 2 1这样一组数,最后的结果就是每个数依次出现在上一个节点的左子树的情况,这样就相当于一个链表,体现不出我们使用树结构的优势,所以需要一些措施让每次插入的节点尽量出现在左右两端,避免出现这样的极端的情况。2.红黑树是这种处理方式的一种常用结构。

红黑树的特点

1.满足二叉搜索树的所有特征2.节点是红色或者黑色3.根节点是黑色4.每个叶子节点都是黑色的null节点

5.每个红色的节点的两个子节点都是黑色

6.从任意节点开始到其每个叶子节点的所有路径都包含相同数目的黑色节点

红黑树的相对平衡

1.从根节点到叶子节点的最长可能路径,不会超过最短可能路径的两倍长

插入节点时变化规则

1.变色

红黑树变化

节点插入时根据以下几点情况做对应的处理:

说明:插入节点为N;父节点为p;祖父节点为G;其父亲兄弟节点为U

情况1:新节点N位于树的根上时,没有父节点;直接将红色节点变成黑色节点即可

情况2:新节点父节点为黑色;性质4没有失效,性质5也没问题;新节点不变,还是红色

情况3:当p和u都是红色节点的时候;将pu变成黑色,g变成红色

情况4:N的父节点是红色,叔叔节点是黑,祖父节点是黑色,然后N是左子节点时: 先把父节点变黑,在把祖父节点变红,再以插入节点的g节点为root节点右旋转;

情况5:N的父亲节点是红色,叔叔节点是黑色,然后N是右子节点时: 先以p节点为根节点进行左旋转,然后将p节点作为新插入节点来考虑(这时情况就是情况4)

通过案例理解红黑树的变化规则和插入操作的情况:

假设现在要依次插入10 9 8 7 6 5 4 3 2 1到一个BST

1.插入10

2.插入9

3.插入8

剩下的画了图

案例

案例

案例

案例



上一篇
《学习JavaScript数据结构与算法》笔记---图论
下一篇
《学习JavaScript数据结构与算法》笔记---树
×