参考资料:
https://zhuanlan.zhihu.com/p/27700617 平衡二叉树、B树、B+树、B*树
https://zhuanlan.zhihu.com/p/78249704 一篇漫画告诉你--什么是红黑树?
二叉排序树
左子树上的所有节点均小于或等于它的根节点,又子树上的所有节点均大于或等于它的根节点;二叉树方便了查找,他的查找逻辑即与二分查找一致。插入即在查找的基础上进行插入对应位置。
B树(B-tree)
M阶代表一个树节点最多有多少个查找路径,M=M路,当M=2则是2叉树,M=3则是3叉
所有节点关键字是按递增次序排列,并遵循左小右大原则;
关键字数:枝节点的关键字数量大于等于ceil(m/2)-1个且小于等于M-1个(注:ceil()是个朝正无穷方向取整的函数 如ceil(1.1)结果为2);(关键字就是每个节点内的数值数量,当不满足是需要进行节点合并)
所有叶子节点均在同一层、叶子节点除了包含了关键字和关键字记录的指针外也有指向其子节点的指针只不过其指针地址都为null对应下图最后一层节点的空格子;
B树的插入:当当前节点满足对应的M阶,即底下的空格子个数=M后,如果插入新的数据就需要进行拆分,拆分逻辑是将中间数据提取到父节点上,左边单独构建一个节点,右边单独构建一个节点
B树的删除:当关键字树不满足时先从子节点取,子节点没有符合条件时就向向父节点取,取中间值往父节点放;
红黑树
节点是红色或者黑色
根节点是黑色
每个叶子节点都是黑色的空节点
每个红色节点的两个子节点都是黑色
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点
红黑树的调整
变色:为了重新符合红黑树的规则,尝试把红色节点变为黑色,或者把黑色节点变为红色。
左旋转:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。说起来很怪异,大家看下图:
右旋转:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。大家看下图: