红黑树与平衡二叉树以此引发的对树的准确理解

        这是在一次面试中问道的题目:面试官的本意,应该是说avl和红黑树在平衡上的区别,导致的应用场景的区别!我也复习了很多次有关树的概念和应用的区别,当时我算是发现了不写下来,不自己综合的整理一遍始终记不住,而且记不久

        先解答:红黑树,区别于avl树(平衡二叉树)----都是在对应的二叉搜索树下面,可以看后续的总结,因为不是强一致性平衡,所以增删改比较适合,因为旋转次数少,如果查询比较多,则avl比较适合,因为对应的查询深度比较统一

树:

 

满二叉树:高度为h,并且由2h-1个结点组成的二叉树

 

完全二叉树:最下面两层结点的度可以小于2,最下层的叶结点集中在靠左的若干位置上

 

 

二叉搜索树 :

        对数访问性能:

分:

        avl(二叉平衡搜索树==平衡二叉树:):高度差不可以超过一(在完全二叉树基础上,可以不满足最左侧以及有序条件)

                

 

 

 

        红黑树:最长路径不超过最短路径的两倍

 

 

        哈夫曼树(Huffman Tree):路径上带有权重

多路查找树

        B树 :每个节点既有数据又有指针,

 

 

        b+树:数据都在根节点,注意:看到的数据也许只是索引作用的指针

 

 

 

        b*树:是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针

 

 

b+树在MySQL的innodb的底层用的比较多:参考扩展链接:InnoDB一棵B+树可以存放多少行数据?

在MySQL中我们的InnoDB页的大小默认是16k,当然也可以通过参数设置:

 比较重要的结论:

        根据同样的原理我们可以算出一个高度为3的B+树可以存放:1170117016=21902400条这样的记录

        所以在InnoDB中B+树高度一般为1-3层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次IO,所以通过主键索引查询通常只需要1-3次IO操作即可查找到数据。

         

MySQL的面试题,为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?

简单版本回答是:
因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;

mysql系列解读请关注再看:后续将解读mysql的源码:

参考链接:

avl和红黑树的理解!

数据结构之树

InnoDB一棵B+树可以存放多少行数据?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

specialApe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值