认真学习数据结构之红黑树

【1】什么是红黑树

红黑树是一种自平衡树,它也是一颗二叉树。既然能保持平衡,说明它和AVL树类似,在插入或者删除时肯定有调整的过程,只不过这个调整过程并不像AVl树那样繁琐。为何红黑树使用得比AVL树更多,就是因为红黑树它的调整过程迅速且简短。

① 五个特点:

  • 节点是红色或黑色

  • 根是黑色

  • 所有叶子都是黑色(叶子是NIL节点,也就是Null节点)

  • 如果一个节点是红的,则它的两个儿子都是黑的

  • 从任一节点到其叶子的所有简单路径都包含相同数目的黑色节点。

如下图所示,就是一颗红黑树:
《认真学习数据结构之红黑树》
注意叶子并不等价于黑色节点,但是他们的颜色都是黑色。

为何要给节点指定红或者黑的颜色?作者这种设计,只是为了从编程上达到一种便利的效果,另外可以让它们在插入时达到近似的平衡,并不像AVL树那样绝对平衡。实际上,红黑树是2-3树的一种变体,某种情况下,它又相当于2-3-4树。因为2-3树在编程上需要比较多的代码量,所以诞生了红黑树这种巧妙的设计。通过加了颜色来区分结点,这样编程上就可以当成二叉树来写程序,不用分别用三个指针表示左、中、右孩子了。

② 红黑树和2-3树的等价性联系

《认真学习数据结构之红黑树》
《认真学习数据结构之红黑树》

从上面看,把红色节点放到与父亲齐平,就是2-3树中的一个2-3节点。

【2】红黑树的操作

主要有三种操作:查找、插入和删除。

① 查找

红黑树的查找方式很简单,只要是树,查找的过程无非就是一个递归过程。如果查找的元素小于当前节点,那么查找其左子树;如果查找的元素大于当前元素,则查找其右子树。

未完待续。。。

参考博文:
红黑树的理解与Java实现
彻底搞懂红黑树

    原文作者:算法小白
    原文地址: https://blog.csdn.net/J080624/article/details/87296436
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞