各类二叉树及红黑树简述
红黑树(Red Black Tree) 是一种自平衡二叉查找树,典型的用途是实现关联数组。
红黑树和AVL(平衡二叉搜索树)树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它可以在O(log n)时间内做查找,插入和删除,这里的n为树中元素的数目。
红黑树在很多地方都有应用。在C++ STL中,很多部分(包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。
在了解红黑树的同时,对以前学过的各类树进行简单的回顾(不太全面,简单回顾一下,后面继续学习):
1) 满二叉树(最后一层全为叶节点)
2) 完全二叉树(与满二叉树的区别是最后一层不要求完整,堆为典型的完全二叉树)
3) 平衡二叉树(左右子树深度绝对值相差小于2)
4) 二叉排序树(又称二叉查找树、 二叉搜索树)
5) AVL树平衡二叉搜索树(既有平衡二叉树的特性,又有二叉排序树的特性)
AVL树是一种二叉查找树的优化结构,目的是为了提高查找的效率。但是带来的问题是需要在插入结点和删除结点的时候维持整棵树的平衡性,在某些情况下,这可能得不偿失,也就是意味着,我们维护二叉查找树的平衡性的代价大于最后我们查找所获得的额外的收益。
6) B+、B-树
B-树是一棵多叉平衡搜索树,旨在比AVL树能够拥有更低的树高度,提高查找的效率,但是同AVL树一样,面对插入和删除数据的操作后需要维持平衡,这可能带来一些得不偿失的情况。其次B-树可以被采用在外存的数据查询上,因为树高比较低,这样就可以减少磁盘的I/O次数。
B+树比B-树更多叉,这就使得树可以更矮;B+树的数据全部存储在叶子结点,中间的结点只是存储键值,不存储数据,那么也就是在相同的磁盘块的大小的情况下,可以存储更多的索引,这样也可以减少磁盘的I/O次数。
关于AVL树,B+ B-树,红黑树的对比可参考https://blog.csdn.net/sup_heaven/article/details/39313731
没有诗和远方
只有代码和当下