红黑树简介(Introduction to Red-black tree)
作者:Bluemapleman(tomqianmaple@outlook.com)
麻烦不吝star和fork本博文对应的github上的技术博客项目吧!谢谢你们的支持!
知识无价,写作辛苦,欢迎转载,但请注明出处,谢谢!
前言:红黑树以操作复杂,但性能优异著称(增删查节点最坏情况的时间复杂度都是O(lgn))。Java的TreeSet和TreeMap都是基于红黑树实现的。红黑树属于BST(二叉查找树)的一种,但它相比BST多了平衡的(balanced)特征,平衡的含义是:“最坏情况下的树高也只是O(lgn)”。而平衡的特性,也就是红黑树能保证优异性能的根本所在。
定义
(可以先尝试了解2-3-4树的概念,2-3-4树也是一种自平衡的树,可以保证在O(lgn)内完成增删查操作,但是由于实现相对较为困难,所以在要求实现高性能的树时往往用性能相似的红黑树来替代。2-3-4树资料)
而红黑树具备以下五个特征的二叉搜索树:
- 每个节点要么是红色,要么是黑色
- 根是黑色
- 每个叶子节点(NIL)都是黑色
- 不能父子节点同时为红色
- 任意一条从根到叶子的路径上都有相同数目的黑色结点
浅色为红色,深色为黑色,图来自