二叉树、平衡二叉树、B树、B+数、红黑树(简述)
二叉查找树(BST)具备什么特性呢?
1.左子树上所有结点的值均小于或等于它的根结点的值。
2.右子树上所有结点的值均大于或等于它的根结点的值。
3.左、右子树也分别为二叉排序树。
查找结点里面的值 的方式就是二分查找的思想 查找次数就是树的高度
二叉查找树可以任意地构造 向一方倾斜的二叉树是不平衡的,查询效率就低了
平衡二叉树(AVL Tree):
插入或删除一个节点后,AVL树失去平衡,AVL树失去平衡之后,可以通过旋转使其恢复平衡
将根节点的左或右孩子作为新根节点(左旋 右旋 多次旋)
平衡多路查找树(B-Tree):
InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块,InnoDB存储引擎中默认每个页的大小为16KB
在把磁盘数据读入到磁盘时会以页为基本单位,在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置,
这将会减少磁盘I/O次数,提高查询效率。
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块
1.每个节点最多拥有m个子树(M阶B树的意思就是:一个根节点最多有M个子节点)
2.根节点至少有两个子树(M>=2(必须))
3.分支节点至少拥有m/2颗子树(除根节点和叶子节点外的都是分支节点)
4.所有叶子节点都在同一层,每个节点最多可以有m-1个key,并且以升序排列
根据根节点找到磁盘块 1 -》根据磁盘块 1 的指针 P2 =》P2 指针找到磁盘块 3 =》列表中找到关键字
P1磁盘块(键值、指针、data值) -》P2磁盘块(键值、指针、data值)
要3次磁盘I/O操作,和3次内存查找操作,按需读取磁盘快,不是全部加载
B-Tree相对于AVLTree缩减了节点个数
每个节点中有key,也有data,而每一个页的存储空间是有限的,如果data数据较大时就会导致每个节点(即一个页)
能存储的key的数量很小
B+Tree:
B+Tree是B-Tree的加强版
B+Tree相对于B-Tree有几点不同:
非叶子节点只存储键值信息。
所有叶子节点之间都有一个链指针。
数据记录都存放在叶子节点中。
B+Tree的高度一般都在2~4层
P1磁盘块(键值、指针)—》叶子结点磁盘块(键值、数据)
红黑树:
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点(NIL节点, 最底部)。
4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
什么情况下会破坏红黑树的规则,什么情况下不会破坏规则呢?
比如最底部叶子节点 上一层是红色 新添加的在红色下面 就不符合红黑色规则
从插入结点处开始,向上遍历树,并更新和修复在这个路径上的每个结点的平衡及其平衡信息(高度)即可
新符合红黑树的规则,尝试把红色节点变为黑色,或者把黑色节点变为红色。
左旋转:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,,而自己成为自己的左孩子
右旋转:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子