常见树结构的逻辑梳理

本文目的:常见树结构的梳理

常用的有哪些树结构?二叉树、AVL(平衡树)、红黑树、B树、B+树…(小和尚念经中)
为什么要有这么多树嘞?一棵树遮风挡雨还不够吗?那当然是不够的!

二叉树:小的数据放左边,大数据放右边,查找时类似于二分查找,时间复杂度可控制在O(logn),属于结构最为简单的树结构,原理简单粗暴,但是在极端情况下,二叉树会退化为链表,这时候其时间复杂度会变成O(n);

为了避免极端情况下,二叉树退化为链表,所以出现了:
AVL树,但是AVL树的要求过于苛刻,因为要避免退化为链表,所以要求每个节点的左子树和右子树的高度差至多等于1,但这导致插入和删除时极易破坏树的结构;为了满足条件时常需要进行太多的左旋右旋去维持树的形状,这就极大地增加了时间复杂度;

为了适应插入和删除较频繁的场景就出现了:
红黑树,红⿊树的平衡性不如 AVL 树,它维持的只是⼀种⼤致的平衡,不严格保证左右⼦树的⾼度差不超过 1。
在插⼊时,红⿊树和 AVL 树都能在⾄多两次旋转内恢复平衡,在删除时由于红⿊树只追求⼤致平衡,因此红⿊树⾄多三次旋转可以恢复平衡,⽽ AVL 树最多需要 O(logn) 次。AVL 树在插⼊和删除时,将向上回溯确定是否需要旋转,这个回溯的时间成本最差为 O(logn),⽽红⿊树每次向上回溯的步⻓为 2,回溯成本低。因此⾯对频繁地插⼊与删除红⿊树更加合适,但是查找方面,红黑树与之相比还是较低的。

到此,满足了数据的查找、插入和删除需求,应该是够用了,不过为什么又出现了B树和B+树呢?
这可以从B树的应用场景中窥探一二:B树多用于文件系统的索引,这是由于B树与前述相比之下具有更多的子树,这也就意味着同样多的数据,利用B树所形成的的树会更矮一点,更矮就代表更高的搜索效率。这也就是B树的优点:多路存储
所以回到最初的问题,为什么出现了B树呢? 是为了应付极大数据量的查找和加载,如文件系统和数据库中。

那B+树是做什么的嘞?
B+树是B树的一个变种,两者区别在于:B 树中每个节点同时存储 key(索引) 和 data,⽽ B+ 树中只有叶⼦节点才存储 data,⾮叶⼦节点只存储 key(索引)。
看出区别了没?B+树的所有数据都只存储在叶子节点上!
InnoDB 对 B+ 树进⾏了优化,在每个叶⼦节点上增加了⼀个指向相邻叶⼦节点的链表指针,形成了带有顺序指针的 B+ 树,提⾼区间访问的性能。(不要小看这个变动,这就形成了一个链表啊!搜索数据岂不是很方便!)
因此B+树拥有更加优越的搜索效率,不需要像B树那样跨层搜索数据,而且由于叶子节点形成了链表,通过定位首尾位置,甚至能够直接将整条链表数据取出!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值