红黑树
![左右旋转](https://cdn.jsdelivr.net/gh/cloud-r/GitakRepository/static_files/blog/img/左右旋.png)
程序员司马讲解二叉树(B站)
遍历->二分法->二叉树->二叉查找树->红黑树(自平衡的二叉查找树)->二叉平衡树(理想状态)
红黑树性质
- 每一个结点不是红色就是黑色
- 红色结点不能够连接在一起
- 根节点必须为黑色
- 叶子结点均为黑色
注意最后一个是NULL,所以表面上叶子结点为红色,但其实是没有问题的
红黑树的变换规则
所有插入的点默认都是红色,否则全黑色就是普通二叉树了,下一步也就无法按照规律变换以达到自平衡。
- 变色规则
当前结点是红色,父结点是红色,且它的叔叔结点也是红色(自红,父红,叔叔红)- 把父结点设为黑色
- 把叔叔结点设为黑色
- 把祖父结点设为红色
- 把指针结点定义到祖父结点设为当前要操作的,分析的点变换的规则(此时可能是要左右旋)
- 左旋
- 当前结点是右子树,且是红色
- 父结点是红色
- 叔叔结点是黑色(右红,父红,叔叔黑)
以父结点左旋
- 右旋
当前节结点是左子树,红色,父结点红色,叔叔黑色。(左红,父红,叔叔黑)
- 把父结点变为黑色
- 把祖父变为红色
- 以祖父为结点右旋
参考
发布时间: 2020-08-01 22:55:10
更新时间: 2022-05-11 21:39:43
本文链接: https://wyatt.ink/posts/Airthmetic/f89cb603q.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!