今天是1024程序员节,祝大家节日快乐!
关键词:索引 二叉查找树 平衡二叉查找树 B树 B+树
推荐一个可以在线演示各种树的插入过程的网站,帮助学习和理解各种树:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
学习MySQL中索引,避免不了B+树。B+树是由二叉查找树到平衡二叉查找树到B树演变而来的,所以一步步从二叉查找树开始了解,对B+树的学习更有帮助。
关于数据结构-树,可以理解成是一种特殊的键值对结构。(就像jdk1.8中,HashMap使用了红黑树来存储数据)
关于索引的知识,请戳这里《MySQL之索引》。
█ 名词解释
首先介绍下树中的几个名词,这些名词对所有的树都共用。
- 根节点:树结构中最顶层的节点
- 子节点:其他节点(父节点)指向的节点
- 父节点:指向其他节点(子节点)的节点
- 叶子节点:没有子节点的节点,在树结构的最底层
- 内部节点:所有的非叶子节点,包括根节点
- 外部节点:即叶子节点
- 左子树:父节点左边分支所组成的树
- 右子树:父节点右边分子所组成的树
(这里的左右,是从我们看过去的角度来说的,而不是父节点自身的角度)
- 树的深度:也叫层级,根节点到叶子节点的路径长度
█ 二叉查找树
二叉查找树,Binary Search Trees,简称BST。
如上图所示,就是一棵二叉查找树,其中:
根节点:27
子节点:对于27来说,14和35是其子节点
父节点:14的父节点是27
叶子节点:10、19、31、42
内部节点:27、14、35
外部节点:10、19、31、42
左子树:对于27来说,14、10和19组成的树就是其左子树
右子树:对于27来说,35、31和42组成的树就是其右子树
特征:
①节点是有序的
②除叶子节点外,每个节点最多有两个分支
③当前节点的左子节点要比自己小