一、二叉查找树

二叉查找树又称为二叉搜索树,或是BST

二叉查找树左节点小于根节点,右节点大于根节点;

二叉查找树比普通树查找更快,查找、插入、删除的时间复杂度为O(logN)

二叉查找树有一种极端的情况,就是会变成一种线性链表似的结构。此时时间复杂度就变成了O(N),为了解决这种情况,出现了平衡二叉树。

二、平衡二叉树

平衡二叉树,又称为AVL树

左节点小于根节点,右节点大于根节点;

左子树和右子树的高度差不得超过1,这样保证了它不会成为线性的;链表

AVL树的查找稳定,查找、插入、删除的时间复杂度都为O(logN),但是由于要维持自身的平衡,所以进行插入和删除结点操作的时候,需要对结点进行频繁的旋转;

并且每个节点只有两个子节点。当进行查找时,就需要多次磁盘IO,(数据是存放在磁盘中的,每次查询是将磁盘中的一页数据加入内存,树的每一层节点存放在一页中,不同层数据存放在不同页)这样如果需要多层查询就需要多次磁盘IO。为了解决AVL树的这个问题,就出现了B 树。

三、红黑树

红黑树是一种自平衡的二叉查找树,它的节点的颜色为红色和黑色。它不严格控制左、右子树高度或节点数之差小于等于1。通过左旋、右旋、变色保证平衡

1.每个节点非红即黑;

2.根节点总是黑色的;

3.每个叶子节点都是黑色;

4.红节点的子节点一定是黑色的

5.从任一节点到叶子节点必须包含相同数量的黑色节点

AVL树是高度平衡的而红黑树不是高度平衡的,它只要求部分地达到平衡要求,结合变色,降低了对旋转的要求从而提高了性能。在最坏的情况下也可以保证O(logN),二叉查找树最坏情况下O(N)。

四、B树

B树也叫平衡树,也叫做B-树。是一种多路平衡树

B树根结点至少有两个子女

所有的叶子结点都位于同一层,每个结点的元素从小到大排列;

B树每一层存放了更多的节点,由AVL树的瘦高变成了矮胖。可以相对减少磁盘IO的次数,MongoDB的索引就是用B树实现的。

B树也是一种自平衡的树,在进行插入和删除操作时也需要对节点进行旋转操作。

五、B+树

B+树每个非叶子节点存放的元素只用于索引作用,所有数据保存在叶子节点

1.每个中间节点不保存数据,只用来索引,所有数据都保存在叶子节点

2.所有叶子节点中包含了全部元素的信息,叶子节点本身依关键字的大小顺序连接

3.为叶子节点增加一个链指针

4.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

因为非叶子结点中存放的元素不存放数据,所以每一层可以容纳更多元素,也就是磁盘中的每一页可以存放更多元素。这样在查找时,磁盘IO的次数也会减少。

另外,B+树的查找稳定,因为所有的数据都在叶子结点。每个叶子结点也通过指针指向构成了一种链表结构,所以遍历数据也会简单很多

插入删除操作会破坏平衡树的平衡性,因此在插入删除操作后,需要对树进行一个分裂、合并、旋转等操作来维护平衡性。

六、B+树与红黑树

红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用B+ 树作为索引结构,主要有一下两个原因:

(1)更少的查找次数

平衡树查找操作的时间复杂度和树高h相关,O(h)=O(logN),其中d为每个结点的出度。

红黑树的出度为2,而B+树的出度一般都非常大,所以,红黑树的树高h很明显比B+树大非常多,查找次数也就更多。

(2)利用磁盘预读特性

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值