插入操作分为以下几种情况:
1:叔父节点是红色,此时 只需要改变父节点 叔父节点颜色为黑色,祖父节点为红色,回溯到祖父节点继续
:2.父节点是红色,叔父节点是黑色,节点属于父节点右孩子 节点属于父节点的右(左)子树,并且父节点也属于祖父节点的右(左)子树,改变父节点为黑色,祖父为红色,左(右)旋操作;
3.叔父节点是黑色,节点属于父节点的右(左)子树,父节点属于祖父的左(右)子树,节点回溯到父节点,进行左(右)旋;
1叔父节点是红色,父节点也是红色;
将父节点和祖父节点设为黑色,祖父节点设为红色,祖父节点设置为当前节点继续操作。
![](https://img.haomeiwen.com/i16660557/965f1d327417880b.png)
下图;节点属于父节点右孩子,叔父节点是黑色的,父节点属于祖父节点的左孩子;节点回溯到父节点进行左旋。
![](https://img.haomeiwen.com/i16660557/9a8781cfd2391cef.png)
下图,当前节点(73)父节点是红色,叔父是黑色,节点和父节点都属于其父节点的右孩子;
1父节点设置为黑色2祖父设置为红色3祖父为支点进行右旋
![](https://img.haomeiwen.com/i16660557/55f1dc9af829cdaf.png)
当前节点是红色,叔父是黑色,节点和父节点都属于父节点的左孩子
设置父节点为黑色,祖父节点为红色,以祖父节点为当前节点进行左旋
![](https://img.haomeiwen.com/i16660557/d16190b986bc18b9.png)
循环结束,根节点置为黑。
节点插入讲解源码:
![](https://img.haomeiwen.com/i16660557/b46c98f3d84c606b.png)
对于代码中的情况1.1 对于的节点操作示意如图1
![](https://img.haomeiwen.com/i16660557/e351998432951c34.png)
对于情况1.2,对于图中代码所示
![](https://img.haomeiwen.com/i16660557/97030548b5d07927.png)
对于情况2 ,如下图所示
![](https://img.haomeiwen.com/i16660557/bd532e55dbcdf9ff.png)
对于情况3,如下图所示
![](https://img.haomeiwen.com/i16660557/d46f2dfc681a7068.png)
对于情况4,如下图所示
![](https://img.haomeiwen.com/i16660557/19d275d2990a6f5e.png)
旋转之后,紧接着进行如下图5 操作
![](https://img.haomeiwen.com/i16660557/cc30f6bc79ebbf3c.png)
网友评论