平衡二叉树、红黑树、B+树简述

1 二叉树
二叉树binary tree是指每个节点最多含有两个子树的树结构。

特点:

    1.所有节点最多拥有两个子节点,即度不大于2

    2.左子树的键值小于根的键值,右子树的键值大于根的键值。

因为二叉树只是定义了简单的结构,所以存在多种深度可能,导致二叉树的效率低,所以引入了平衡二叉树。

2 平衡二叉树
2.1 avl树
平衡二叉树,基于avl算法,即是avl树(avl tree)

特点:

    1.符合二叉树的条件下

    2.任何节点的两个子树的高度最大差为1

    如果在avl 树,中进行插入和删除节点操作,可能导致avl树失去平衡,那么可以通过旋转重新达到平衡。因此我们说的二叉树也称自平衡二叉树。

2.2 红黑树
红黑树和avl树类似,都是在进行插入和删除操作时通过特定的操作保持二叉树的平衡,从而获得较高的查找性能。

在java中TreeSet,TreeMap的底层就是用的这个方法。

特点:

    1.节点是红色或黑色

    2.根节点是黑色

    3.叶子节点(nil,空节点)是黑色

    4.每个红色节点的两个子节点都是黑色

3 B-tree
B通常理解成是Balance的意思,B- tree 就是B树,简称平衡树。

    B树是平衡多路查找树(有多个查找路径,不止2个),是一种平衡的多叉树。因为B树是平衡树,每个节点到叶子节点的高度都是相同的,这样可以保证B树的查询是稳定的。

    使用B tree 可以显著减少定位记录时所经历的中间过程,从而快速定位,加快存取速度。

    与二叉树相比,B-tree利用多个分支(二叉树只有2个分支)节点,减少了获取记录时所经历的节点数,从而达到节省存取时间的目的。

特点:

    1.每个节点的关键字增多了,特别是B树应用到数据库中的时候。

    数据库充分利用了磁盘块的原理(磁盘数据的存储采用的是块的形式进行存储,每个块的大小一般为4k,每次去取数据的时候,就是取出这个4k的大小,而不是只取出你想要的大小。就是说每次IO的时候,同一磁盘块的数据都是一次性提取出来)。把树的节点关键字增多后,树的层级比原来二叉树的层级少了,这样就可以减少数据查找的次数 ,降低复杂度了。

    2.所有的页节点都在同一层上

B+ tree
B+tree 是在 B- tree基础上的优化,使其更适应存储索引结构

    B- tree的结构中,每个节点不仅包括数据的key值,也包括data值。而每一页的存储空间都是有限的,如果data数据较大的时候,会导致,每一页中存储的key比较少,当存储的数据量比较大时,同样会导致B- tree的查询深度很大,增加磁盘IO次数,进而影响查询效率

    B+ tree中,非叶子节点上只存储key的信息,这样可以加大每一页中存储key的数量,降低B+ tree的高度。

特点(与B- tree相比):

    1.非叶子节点只存储key信息

    2.所有叶子节点之间有一个链指针

    3.B+的非叶子节点只进行数据的索引,不会存实际的关键字记录的指针,所有数据地址必须要到叶子节点才能获取到,所以每次数据查询的次数都一样。

    4.B+树的应用场景主要是数据库索引结构,数据库的查询有时候可能一次多条,如果分布在不同的层(树的层级),那么在取出数据后,还需要做排序。而在一个层级上,且有指针连接各个叶子节点也使得查询效率更高。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值