1、红黑树的特性
性质1. 节点是红色或黑色
性质2. 根节点是黑色
性质3.所有叶子都是黑色。(叶子是NUIL节点)
性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5.. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点
2、插入过程
个人理解,根据性质2,3,5每次插入是均是红色节点,因为 如果根节点为黑色,如果插入是黑色,则无法平衡,只能变色
所以每次插入时节点初始化值是红色
第一步:根节点插入是,红色节点变为黑色节点即可
第二步:查找节点是否存在,存在覆盖即可
第三步:父节点为黑色,直接插入
第四步: 父红(P)叔红(U),根据性质4不能有两个连续的红色节点,故需变色,谁来变色呢?新插入的节点吗,显然不行,这样会违反性质5,故需要父、叔节点同时变黑(因为如果只变一个,原本树是平衡的,变一个显然不平衡了)那么P、U的父节点(GP)必然是黑色需涂红,以GP为新增节点继续遍历
第5步:父红叔黑,插入时与父在同一侧,以GP为支点左或右旋转
第六步:父红叔黑,插入时不再同一侧,已P为支点旋转进入第5步
本文看https://www.jianshu.com/p/96e652ccf720的后自己总结