红黑树新增解析-idea插件动态生成树结构图
之前写过红黑树的新增和删除,当时只是在控制台打印树结构。如下图:
这种方式也能大致展示出树的层次结构和颜色。但是看起来还是不是很直观,比较费眼神。正好最近看到一个idea图片相关的插件,用来打印各种数据结构比较方便又直观。
之所以再写一遍,是如果能更加直观展示数据结构,这对于理解和记忆都会更容易。所以这里基于新的方式,再梳理一下插入逻辑。
先准备了一组要插入红黑树的数据,然后逐个插入,插入完一个数据之后用图片展示在插入前后以及插入过程中树的数据结构。
插入3;这里用黄色代替黑色,因为如果直接用黑色的话,会遮挡数字展示;
插入0;0小于3,插在左边;这里为了展示效果,所有叶子中的空节点都用白色补位;
插入2;红框中是旋转部分,红色用pink,黑色用cyan。可以看到2插在0的右边,此时这两个节点都是红色;那么先将0左旋转,然后将3右旋转,最后变色。这里比之前控制台打印就非常直观了。
插入1;只用看红框部分,插入1之后,因为其父叔节点都是红色,那么将其父叔节点都改为黑色,然后将其祖父节点改为红色,将问题递归向上转移。而其祖父刚好又是根节点,那么直接改为黑色就完事了。
插入4;不会打破原始的平衡;
插入5;插在4的右边,4又是红色;只需要将3左旋转,然后变色就好了。
插入6;和插入1的情况一样。将问题抛给4,然后4的父节点又刚好是黑色,所以简单变色问题就解决了;
插入7;只需要将5左旋转下来,变色就可以了;
插入10;首先将问题转移给6,但4也是红色;显然现在只能将2左旋转了;要注意的是现在4有左节点3,而2左旋转将成为4的左节点,那就冲突了;不过由于2左旋转,2的右节点将会空出来,那么3刚好变成2的右节点,此时2也可以成为4的左节点了;左旋转结构如下:
左旋转之后变色一下可以了;
插入9;先右旋转10;
再左旋转7;
最后变色完事;
插入8;先将问题抛给9,再将问题抛给4,而4是根节点;
上面过程包括了,单独一个旋转,先左再右或先右后左,以及向上转移等红黑树中基本的情况!有没有涉及到的都是镜像对称的情况。