1,红黑树定义和性质
红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质:
- 性质1:每个节点要么是黑色,要么是红色。
- 性质2:根节点是黑色。
- 性质3:每个叶子节点(NIL)是黑色,在Java中,叶子结点是为null的结点。
- 性质4:每个红色结点的两个子结点一定都是黑色。
- 性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。
从性质5又可以推出:
- 性质5.1:如果一个结点存在黑子结点,那么该结点肯定有两个子结点
2,节点的插入
红黑树插入节点,默认是红色。
需要变色的情况:当前节点的父节点和叔叔节点都是红色时,需要变色。
需要旋转的情况:当前节点的父节点为红色,叔叔为黑色或者不存在,且当前节点为右子树,则左旋。
当前节点的父节点是红色,叔叔节点是黑色或者不存在,且当前节点是左子树,则右旋。