红黑树
平衡效率没有AVL好
插入删除少,查找多的时候,用AVL。
插入删除多,查找少的时候,用红黑树。
特性
性质1. 结点是红色或黑色。
性质2. 根结点是黑色。
性质3. 所有叶子都是黑色。(叶子是NIL结点)
性质4. 每个红色结点的两个子结点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色结点)
性质5. 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。
红黑树高度h不超过2log2(n+1),证明省略。
插入节点规则
对于新插入的节点,先置为红色
例子,空树插入以下节点:35、75、65、56、78、29、41、37、38。
1.插入节点35,父节点为空null,将节点35颜色置为black
2.插入节点75,父节点为black,直接插入
3.插入节点65,如图1;
此时,父节点red,叔节点black,RL类型,根据规则,先右旋,此时父节点75当作新插节点如图2;
此时,父节点red,叔节点black,RR类型,根据规则,父节点65置为black,祖父节点35置为red,然后进行左旋,得到图三。
4.插入节点56,如图1;
此时,父节点red,叔节点red,根据规则祖父节点置red,父节点和叔节点置black,将祖父节点65当作新插节点,如图2;
此时,根据规则,父节点为null,将节点65置black,如图3
5.插入节点78,父节点为black,直接插入。
6.插入节点29,父节点为black,直接插入。
7.插入节点41,如图1;
此时,父节点red,叔节点red,根据规则祖父节点置red,父节点和叔节点置black,将祖父节点35当作新插节点,如图2;
由于节点35的父节点为black,无需操作。
8.插入节点37,如图1;
此时,父节点red,叔节点black,类型LL,根据规则,父节点变黑,祖父节点变红,然后右旋,如图2;
9.插入节点38,如图1;
此时,父节点red,叔节点red,根据规则,祖父节点变红,父节点和叔节点变黑,将祖父节点41当作新插节点,如图2;
此时,父节点red,叔节点black,LR类型,根据规则,先左旋,然后父节点35当作新插入节点,如图3;
此时,父节点red,叔节点black,LL类型,根据规则,父节点变黑,祖父节点变红,右旋,如图4;
至此,插入完成,一个红黑树构建完毕。
参考
https://www.cnblogs.com/woniu4/p/8086707.html