二叉搜索树,二叉平衡术,红黑树,B树,B+树

二叉搜索树

二叉排序树定义:
二叉排序树或者是空树或者是满足以下条件:
1)若它的左子树不空,则左子树上的所有关键字小于根关键字的值
2)若它的右子树不空,则右子树上的所有关键字大于根关键字的值
3)左右子树又各是二叉排序树
二叉排序树又叫二叉搜索树,二叉查找树
优点:可以非常方便地对树中所有节点进行排序和检索,结合了链表和数组的优点
缺点:二叉搜索树,最差情况下,会变成链表的形式,退化成线性时间,复杂度为n,检索效率变差。
例如插入时,记录有序,则构建的二叉搜索树变成普通的链表,或者由于插入删除操作,二叉排序树会变成链表。
由于二叉搜索树的查找性能取决于树的高度,为了获得更高的查找效率,平衡二叉树对二叉排序树的高度进行控制,来提高检索效率。

平衡二叉树

平衡二叉树定义(AVL):
AVL树或者是一棵空树或者是具有下列性质的非空二叉查找树:
(1) 任一结点的左、右子树均为AVL树
(2) 根结点左、右子树高度差绝对值不超过1
平衡二叉树为了防止二叉搜索树退化成链表,在每次插入删除后,对二叉平衡树进行旋转,使之平衡。
缺点:插入删除操作,需要进行旋转操作

红黑树

红黑树定义:
平衡二叉树的一种, 一种自平衡二叉查找树,在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能
优点:红黑树能够以O(log2(N))的时间复杂度进行搜索、插入、删除操作。此外,任何不平衡都会在3次旋转之内解决
性质:
1. 节点是红色或黑色。
2. 根节点是黑色。
3.所有叶子都是黑色。(叶子是NIL节点)
4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5… 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
场景:java中的set和map

B树

B树定义:
可以理解为一种平衡多路查找树,相对于平衡二叉树,每个节点包含的关键字不止一个,把树的节点关键字增多后树的层级比原来的二叉树少了,减少数据查找的次数和复杂度。
特点:
1.一个节点多个元素
2.节点有序
场景: 多用于文件系统,因为文件存储在硬盘,一般情况下比较大,无法一次加载到内存,可以通过每次加载B树的一个节点往下查找。

B+树

B+树是B树的改进,非叶子节点不存储记录,从而每个节点可以存储更多的关键字,进一步降低树的层级,增加查找效率 。
性质:
1.B+树的非叶子节点不保存关键字记录的指针,每个节点能保存的关键字大大增加,降低树的层级
2.B+树的根节点关键字的个数和子节点的数量相等
3.B+树的非叶子节点只进行索引,关键字记录指针都保存在叶子节点,所以每次查找记录的路径高度是一样的, 查询比较稳定
4.B+树的叶子节点从小到大通过指针链接 ,(特别适合数据库的区间查询)
特点:
1.一个节点多个元素
2.节点有序
3.非叶子节点在叶子节点冗余
4.叶子节点有指针链接

优点:每个叶子节点的存储的关键字更多,降低树的层级,查找效率提高,同时所有的记录指针都保存在叶子节点,因此查找速度相对稳定。
在这里插入图片描述
(来自网络截图)
B+树在mysql中的应用
在这里插入图片描述
(来自网络截图)

mysql中的B+树的叶子节点的指针是双向的
场景:多用于数据库的索引,数据库中的查询经常是连续的多条记录,如果是B树可能需要做中序遍历,跨层访问,而在B+树中,记录都保存在叶子节点且有指针相连
补充:数据库中的索引还有另一种存储方式hash存储,hash存储适合查询单条数据,如果是多条数据用B+树可以一次通过指针全部查到。数据索引一般存储在硬盘,量大的话,B+树允许分批载入内存,树的高度也比较低,查询效率较高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值