红黑树的插入
红黑树的定义
红黑树首先是一棵二叉查找树(BST),并且符合以下规则:
- 节点是红色或黑色的
- 根节点是黑色的
- 叶子节点是黑色的空节点
- 红色节点的2个子节点一定是黑色的(不能出现红红相邻)
- 任一节点到叶子节点的每条路径中,黑色节点的数目相同
特性
红黑树是一棵相对平衡的BST,从根节点到叶子节点的最长路径,不超过最短路径的2倍
红黑树的变换
主要分2种,变色和旋转,都不影响BST的规则。旋转分为左旋和右旋:
- 左旋是右孩子替代父节点的位置,父节点变成右孩子的左孩子,如果右孩子已经有左孩子,将左孩子放到父节点的右孩子
- 右旋是左孩子替代父节点的位置,父节点变成左孩子的右孩子,如果左孩子已经有右孩子,将右孩子放到父节点的左孩子
破坏规则的情况及解决
红黑树新插入节点总是红色的
- 插入节点是根节点,直接置为黑色
- 父红叔红祖黑:变色,使父黑叔黑祖红,如果祖的父是红色的,按照2,3,4递归处理
- 父红叔黑祖黑,且为父的左孩子:先变色后右旋,使父黑祖红,再以祖为根右旋
- 父红叔黑祖黑,且为父的右孩子:先以父为根左旋,这时候就变成了3了,按照3处理