红黑树
今天面试的时候面试官问到了红黑树,所以在这里进行一个简要的总结吧
红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。
在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体,java8里面的hashmap也用到红黑树。
红黑树五个性质
红黑树,顾名思义,通过红黑两种颜色域保证树的高度近似平衡。它的每个节点是一个五元组:color(颜色),key(数据),left(左孩子),right(右孩子)和p(父节点)。
性质1. 节点是红色或黑色
性质2. 根是黑色
性质3. 所有叶子都是黑色(叶子是NIL节点)
性质4. 如果一个节点是红的,则它的两个儿子都是黑的
性质5. 从任一节点到其叶子的所有简单路径都包含相同数目的黑色节点。
![](http://upload-images.jianshu.io/upload_images/3123150-9e8f61dc86d3aa33.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/426/format/webp)