概述
本篇文章主要讲述红黑树的插入和删除操作,而红黑树的查找操作和普通的二叉查找树完全相同,因此不用过多的介绍。因为向红黑树中插入或删除节点时会引起红黑树结构的变化,有时还会破坏红黑树的性质,所以为了在插入或者删除之后继续保持满足红黑树的性质,我们不得不做很多的工作,主要有左旋转,右旋转,改变节点颜色等。
红黑树的查找
在红黑树中查找一个键值是否存在时,首先从根节点开始,如果根节点的键值等于要查找的键,那么直接返回结果,否则判断根节点和被查节点的大小。若被查节点大于根节点则进入右子树继续查找,否则进入左子树。并且递归进行这一过程,知道找到相同的键值或者已到达红黑树的叶子节点。这是一个2分的过程,时间复杂度为lgn。
红黑树的插入
我们向红黑树中插入新的节点时,约定新节点的颜色为红色,这里将其成为N。由于红黑树也是一种二叉搜索树,所以每次插入新节点时,必然是向叶子节点插入,但为了保持红黑树的性质,要进行一些旋转操作,我们在下面的情况中一一说明。
1、当目前的红黑树是一颗空树的时候,直接将N的颜色改为黑色即可。
2、当N的父节点为黑色时,直接插入,不需要修改。
3、当N的父节点为红色时,会涉及到三种情况。
- N的叔父节点为红色。这种情况,将N的父节点和叔父节点的颜色都改为黑色,若祖父节点是跟节点就将其改为黑色,否则将其颜色改为红色,并以祖父节点为插入的目标节点从情况1开始递归检测。