BST,AVL树,红黑树,B树,B+树,B*树(从map的底层实现到mysql索引原理)

本文概述了各种平衡二叉树(BST, AVL树, 红黑树)以及B树家族(B树, B+树, B*树)的特点和用途。讨论了它们在搜索、插入和删除操作的效率,以及在数据库索引中的应用。特别强调了红黑树在STL map中的实现,B树和B+树如何利用局部性原理提高大数据量检索效率。" 43565281,1493253,Spark计算模型与系统架构解析,"['Spark', '计算模型', '分布式计算']
摘要由CSDN通过智能技术生成

本文不会对具体细节过多的探究,力求得到这几种树的联系以及区别,实际运用。

BST(二叉检索树):

二叉检索树也是我们最熟悉的一个索引方式了,它保证所有节点的左子树都小于该节点,所有节点的右子树都大于该节点。就可以通过大小比较关系来进行快速的检索,在一棵满二叉平衡树的情况下,检索的效率可以达到logn(类似二分检索),然后插入和删除的效率也是稳定的logn。
还是上一张图吧:
这里写图片描述
BST可以很多题目相关考察的重点,这里要注意:如何找BST的最低公开节点,BST的中序遍历得到的结果是递增序列。
这里要讲一下BST的一个缺点,由于BST没有相关措施保持平衡,很容易因为插入数据的不对导致树的不平衡,当极度不平衡的时候,BST就会退化成一个链表,搜索的速度自然也就降低到了N,相关维护的代价也高(要想插入和删除,前提是要找到该节点)。

AVL树:

AVL树解决了BST中容易出现不平衡的问题,通过旋转的手段来让BST保持满二叉树的性质,当插入一个新节点之后,从插入结点向上判断是否出现高度差超过2的结点,然后通过旋转来恢复平衡,具体的平衡规则可以看我这篇博客:
https://blog.csdn.net/github_33873969/article/details/79487199

AVL树有一个缺点就是维护的代价过高,相较于BST,AVL树要有一个保持平衡的旋转操作,并且要保持严格平衡,所以维护代码高。

红黑树:
红黑树是我这篇文章要说的一个重点,我们的stl中的map也是低层也是通过红黑树来实现的,先说下红黑树的5个基本原则吧:
红黑树首先是二叉平衡树

1.每个结点或是红色的,或是黑色的。
2.根结点是黑色的。
3.每个叶结点(NIL)是黑色的。
4.如果一个结点是红色的,则它的两个子结点都是黑色的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值