红黑树(一)
在详解红黑树前要先需要了解旋转操作,
旋转
不改变颜色,仅仅改变节点的位置,来做出调整二叉树的结构,使其达到相对平衡
插入
找到要插入的位置,将其插入,并设置成红色,(该节点插入后一定是叶子节点,具体可看二叉搜索树的插入)。一位新插入节点是红色,所以可能存在父节点也是红色,违反了性质4,而且如果新插入节点是唯一一个节点,所以该节点既是叶子节点,也是根节点,根节点为红色,违背了性质2.
所以第一步要解决上述两个问题。先解决针对违反性质4的问题,新插入节点和其父节点都是红色,其爷爷节点肯定是黑色,因为其父节点是红色,那么判断其叔叔节点是否为红色,如果为红色即可将红色上移,黑色下移,即为情况一的处理方法,该种情况是可能会保持循环的,也就是能不断将红色节点上移,但是其父节点还是可能会是红色。
当叔叔节点不为红色,z节点为右节点(z的父节点为爷爷节点的左节点)时,对其进行左旋。并调整可能破坏结构的最底层节点的指针,这种情况做完处理后,会转变为第三种情况,直接让第三种情况进行处理即可,不需要再去进行循环了。
当叔叔节点不为红色,z节点为左侧节点(z的父节点为爷爷节点的左节点)时,调整颜色对其进行右旋,该步骤结束后红黑树重新满足性质4。
对于性质2,则在所有操作完了之后,将根节点设置为黑色即可,该操作不会影响任何红黑树的性质。