mysql 二叉树存储_为什么MySQL数据库要用B+树存储索引

二叉树的定义:

二叉树是一种树形结构:

特点是与每个节点关联的子节点至多有两个(可为0,1,2)

每个节点的子节点有关联位置关系

定义:

二叉树是节点的有限集合,该集合或为空集,或由一个根元素和两棵不相交的二叉树组成(递归定义)

二叉树的两棵子树分别称为它的左子树和右子树

二叉树的5种基本形态:

空二叉树

只有根节点

只有左子树,右子树为空

只有右子树,左子树为空

左右子树都不为空

满的和完全的二叉树:

满二叉树:树中每个分支节点(非叶节点)都有两棵非空子树

完全二叉树:除最下两层外,其余节点度数都是2,如果最下面的节点不满,则所有空位都在右边,左边没有空位,如下图

扩充二叉树(由已有非空二叉树生成的一种二叉树):

是原二叉树的最小节点扩充,使原树中所有节点的度数都变成2

二叉树的性质:

性质1. 非空二叉树第 i 层上至多有 2i 个结点(i ≥ 0)

性质2. 高度为 k 的二叉树至多有 2k-1 个结点(k ≥ 0)

性质3. 对任何非空二叉树 T,若其叶结点个数为 n0,度数为 2 的结点

个数为 n2,则n0 = n2 + 1

性质4. n 个结点的完全二叉树的高度 k = ⎡log2(n+1)⎤

性质5. 满二叉树里的叶结点比分支结点多一个

二叉树的数据结构

基本操作

创建二叉树

一棵二叉树或为空(用 None 表示),或是两棵已有二叉树和要存在树根结点的一项数据,构造起的根结点代表构造出的二叉树:

BiTree(dat, left, right)

判断树空:is_empty(bitree)

访问操作,访问二叉树的组成成分:

访问二叉树的根结点数据元素:data()

取得一棵二叉树的左右子树:right(),left()

case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构。

case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

​case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。

​取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令

1. 树

c2703ba224babef8559202ca56063ef0.png

2. 红黑树

207f44217fce8b251422d98ef5b6812e.png

3. 红黑树。。。

566bf5f948b663b62c2563161a53ddeb.png

4. 红黑树的定义和如何实现的就不要说了,说说红黑树的优点

190a598037262d6a98c0bd206838968d.png

5. 二叉排序树【左边比根节点小,后边比根节点大】

cca93da7333321f745ea6177b29e318c.png

6. 二叉排序树的退化

e41de76c019eb2f010b97abba5ec722d.png

162ab149e9b0142d6ab966cbfbb9efa1.png

bda97d484e4d528778338b20a5f709dd.png

7. 红黑树

3d197da026249a3a71131054c65d1db8.png

246f951aaaf6df21bbc59c357e25269f.png

38e6b865f7db8232b2d04f58d2457e3b.png

8.因为:

542a9a254cee51d2490a4900a657bd3c.png

6c6521eea72707f1edc13fab82260b05.png

f791d2afe210937dd3fbf4123690c30e.png

9.B树

b47eb7d3a59c901e3d94b95626e04c2a.png

f9e8636d30947ef29b75ab36541d93fd.png

15c2ed9ddb0d3d76435effcff267696d.png

a222aa5b79214f8c780b941b0a35a137.png

c4e5d85a1913b1730a4c9af633ce17f7.png

6b94cdd4812d565c300fe50bbd5e2ba8.png

c58b2a8054aa91390bdc4b59ea72d95e.png

cad0c42961c27cf3b3dd652131e02593.png

85ebedf2d23480bfa2043f703e95e145.png

10. 文件系统用B树,不用红黑树或别的呢

1252791cb93a3e07bdec19571244a23e.png

47baeb3475d678bde0b2640b1407676e.png

d9a4544322a304427ea9f668d0e75051.png

18c97860112e329067200b705350a037.png

1a5bea58d770ec39ebe2d9001781a8c8.png

203629fd671fe925f236aa2fcbb3c01e.png

507ca5540a8137bddb0ac8bf5405a59e.png

db2f6dcda0964e73df314155a8ebf294.png

1658406b4eb9cbb882f600860d8ce8f0.png

11. B+ 树

f76414ebb0338bee346f2c605f25f581.png

999ebed05312b8b87fbada674a8cb441.png

f58ae954306e1a4da92aaac3602f1b19.png

5190dac87de276734dcd841a075e5032.png

9fe8499e264fcd8257a170bfcce7bd6a.png

如果是多条的话,B 树需要做局部的中序遍历,可能要跨层访问。

而 B+ 树由于所有数据都在叶子结点,不用跨层,同时由于有链表结构,只需要找到首尾,通过链表就能把所有数据取出来了。

a8f96906b7e076fc07e4be31a6d6f2e6.png

回到现场

8e6e8199b5c4cbf111456b0a25c3c381.png

ff5c09883dedb5f491ff0c66fae10171.png

6ddb69c27676cf4b78f59cd72df0ed11.png

ad94d897689f5f6191ba4c93d578162a.pngHAHAHA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值