红黑树规定:
- 性质 1:每个节点要么是红色,要么是黑色。
- 性质 2:根节点永远是黑色的。
- 性质 3:所有的叶节点都是空节点(即 null),并且是黑色的。
- 性质 4:每个红色节点的两个子节点都是黑色。(从每个叶子到根的路径上不会有两个连续的红色节点)
- 性质 5:从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点。
在插入的的时候,通常把新项作为叶子节点放在树中。如果我们把该叶子节点涂成黑色,那么一定违反性质5,所以插入一定是涂成的红色。
红黑树的插入:
1,将红黑树当成一个二叉查找树,将节点插入
2,将插入节点着色为红色
3,通过一系列旋转着色操作,使之重新成为一颗红黑树
AVL树和红黑树:
1,红黑树不满足AVL树的平衡条件(平衡因子 -1,0,1),
2,满足红黑树的规则带来的好处是增删节点的旋转次数的降低,最多不超过3次。
3,在插入节点的时候,AVL树和红黑树都最多需要2次旋转操作,但是在删除节点的时候,AVL树要考虑整个路径上的平衡情况,时间复杂度是O(logN),红黑树最多3次。O(1)
4,AVL是严格平衡树,在插入删除时,更容易不平滑,意味着更高的旋转频率。但是AVL树因为严格平滑,所以AVL树的高度为优于红黑树。
结论:在涉及大量查找操作,少量增删操作,AVL要优于红黑树,反正红黑树优于AVL树。
红黑树应用:。。。。