本文参考自http://blog.csdn.net/sun_tttt/article/details/65445754(最容易懂得红黑树)
先对红黑树有一个基本的了解
红黑树也是一棵二叉树,而且是一棵自平衡的平衡二叉树(平衡二叉树的任意一个节点的值会大于他左子树所有节点的值,小于它右子树所有节点的值),但是他的自平衡不是严格的控制左右子树高度或节点数之差小于等于1,而是通过他的红和黑的五大性质来实现自平衡
下面就是红黑树必须遵守的五大性质
1. 每一个结点要么是红色,要么是黑色。
2. 根结点是黑色的。
3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何关键字信息,所有查询关键字都在非终结点上。
4. 每个红色结点的两个子节点必须是黑色的。换句话说:从每个叶子到根的所有路径上不能有两个连续的红色结点
5. 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点
通过数学的运算可以证明这样红黑树的高度依然是平均log(n),且最坏情况高度不会超过2log(n)。
给一个示例图
然后看一下平衡二叉树的左旋和右旋的操作
(左右旋并不会违反“平衡二叉树的任意一个节点的值会大于他左子树根节点的值,小于它右子树根节点的值”这一特性)
至于插入的操作就不赘述了(情况有点多)
删除的操作略微复杂,具体参考
https://www.cnblogs.com/tongy0/p/5460623.html