转载部分

红黑树初步理解

2019-04-25  本文已影响130人  官总哦

为什么?

为什么要学习红黑树?我们数据结构中学习过二叉查找树,二叉查找树可以增大查找的效率,但是二叉查找树有一个巨大的缺陷,那就是最坏的情况,二叉查找树会退化为链表(查找树不一定平衡);我们还学过二叉平衡树,就是说二叉树中任意节点的左右子树高度差不大于1,但是平衡二叉树也有一个缺陷,就是插入/删除的时候,可能频繁地进行旋转操作,降低了程序效率。为解决以上问题,红黑树应运而生。

是什么?

红黑树的定义是什么?维基百科给出了这样的定义:
同时满足以下5个条件的二叉树为红黑树:
(1)所有的节点为红色的,或者黑色的;
(2)根节点为黑色节点;
(3)所有的叶子节点不存储数据(为空节点),全部为黑色;
(4)如果一个节点为红色,则它的左右子节点必须为黑色;
(5)任意节点每个叶子节点的黑高(节点的黑高,也就是该节点到叶子节点经过的黑色点数)相同。

好在哪?

(1)维持了黑色节点的平衡性,且任意节点的左右子树深度差不会超过2,大体上也等于平衡二叉树的性能;
(2)相比平衡二叉树,大大减少了其旋转操作,减少了插入复杂程度。

插入删除操作简述:

1.插入操作
(我们插入时默认插入的是红色节点,且插入时一定插入在叶子节点的父节点)
在这里我们将插入操作分为了6种情况:


1.PNG

2.删除操作
删除操作我们选取右子树的最小节点替换亟待删除的节点。(如果没有右子树,说明此节点是最大节点,直接删除,将其左子树代替它的位置即可)
因为替代的节点是右子树最小节点,则这个节点一定不存在左子树,我们将删除点分为以下几种情况:

2.PNG
3.PNG

待项目完成,再将红黑树的建立和操作代码传上来

上一篇 下一篇

猜你喜欢

热点阅读