数据结构——树

二叉树
在这里插入图片描述
1.度:一个节点拥有的子节点数,上述A的度为2,B和C的度为0.
2.高度:树的层数,A在第一层,B和C在第二层,从上至下类推。
3.根节点:树的开始节点,A

二叉查找树(二叉搜索树,二叉排序树)
在这里插入图片描述
1.二叉查找树添加逻辑:从根节点开始若比根节点小则放在左边,比根节点大放在右边,相等不添加。
2.查找逻辑:从根节点开始,小的往左找,大的往右找。

平衡二叉树
1.任意节点的左右子树高度差不超过1的树称为平衡二叉树。
2.左旋:在添加一个节点后发现破坏了平衡,使得右子树高度高于左子树+1,此时触发左旋。
3.右旋:在添加一个节点后发现破坏了平衡,使得左子树高度高于右子树+1,此时触发右旋。

左旋前:
在这里插入图片描述

左旋后:
在这里插入图片描述

左旋前:
在这里插入图片描述
左旋后:
在这里插入图片描述
右旋同理反向。

左左:添加节点在左子树的左子树上,导致不平衡,选择右旋回复平衡。
左右:添加节点在左子树的右子树上,导致不平衡,先把根节点的左子树左旋再将整体右旋回复平衡。
右右:添加节点在右子树的右子树上,导致不平衡,选择左旋回复平衡。
右左:添加节点在右子树的左子树上,导致不平衡,先把根节点的右子树右旋再将整体左旋回复平衡。

红黑树
1.红黑树是一种自平衡的二叉查找树。
2.每个节点都有存储位表示节点的颜色。
3.红黑树不是高度平衡的,它的平衡是通过“自己的红黑规则”进行实现的。
红黑规则
1.一个节点只能有红色或黑色两种颜色。
2.根节点必须是黑色。
3.如果一个节点没有子节点或父节点,则这些节点相应的指针属性值为Nil,这些Nil节点都视为叶节点,每个Nil叶节点都是黑色。(Nil也就是空节点)
4.如果一个节点是红色,那么它的子节点必须是黑色。(不能出现两个红色节点相连的情况)
5.对每个节点,从该节点出发到其后代节点的简单路径上均包含相同数目的黑色节点。

6.红黑树的节点:
在这里插入图片描述
红黑树——添加节点的默认颜色
1.添加节点的颜色可是红色也可是黑色,但红色效率相对高一些。

红黑树添加节点后如何保持红黑规则
说明:叔叔节点:指当前节点的父节点的兄弟节点。
1.默认红色节点进行添加。
2.当添加节点的父节点是黑色,则不需要进行任何操作。
3.当父节点为红色且叔叔节点也是红色,则进行以下三步操作。

  1. 将父节点和叔叔节点变成黑色。
  2. 将祖父节点变成红色。
  3. 若祖父节点是根节点则变回黑色。

4.当父节点为红色且叔叔节点也是黑色,则进行以下操作(此时触发旋转)。

  1. 将父节点设为黑色。
  2. 将祖父节点设为红色。
  3. 以祖父节点为支点旋转。
    在这里插入图片描述

b树和b+树在索引中的应用

磁盘存储:
1.系统磁盘存储数据是以磁盘块为基本单位来存储数据的。
2.每次读取会读到该数据所在的磁盘块,将磁盘块全部读取。
3.InnoDB存储引擎里有页(page)的概念,页是磁盘管理的最小单位,InnoDB中每个页默认大小为16kb。
4.InnoDB引擎将若干个地址连接磁盘块,在查询数据时如果一个页中的每条数据都能有助于定位数据记录位置,那么会大大减少磁盘读取的次数(I/O的次数),提高查询效率。

b树
数据库中索引的原理
在这里插入图片描述
如上图,红色为id索引,蓝色为索引,黄色为真实数据。

查询原理:假设要读取15索引的数据,从根节点开始先会将磁盘1全部读取然后通过比较得到15小于17,所以由C2指针找到磁盘块2并将磁盘块2全部读取,然后再次比较发现15大于12,所以由C7指针找到磁盘7并将自盘全部读取,找到15索引的数据。

问题:可以看到,查询的效率并不是很高,每次经过的磁盘块节点都需要全部读取。所以就有了b+树。

b+树
在这里插入图片描述
如上图可以看到,比较b树而言:
1.真实数据都在叶子节点。这么做降低了磁盘的读取次数。
2.叶子节点之间是被连接起来的。这样做的目的是在进行一次查询后,本次的查询结果可被记录,第二次查询时可以优先从第一次查询的结果出发寻找需要查询的结果。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值