树的存储方式都是以链表的方式来实现的
1.二叉排序树
1.1若左侧不为空,则左边的所有节点的值都小于它的根节点的值
1.2若右侧不为空,则右边的所有节点的值都大于或等于它的根节点的值
1.3因此左右两侧也称为二叉排序树
问题:
当二叉排序树两侧不平衡时,那么树的作用不就没有意义了吗
根据以上问题,衍生出了平衡二叉树
2.平衡二叉树
任意子节点的高度差都要小于等于1
那么这个树结构需要通过右旋转来形成平衡二叉树
2.1右旋转
2.2左旋转
2.3双旋转
当前节点的左子树的右子树的高度大于当前节点的左子树的左子树
这种情况需要先将左子树进行左旋转,再将根节点进行右旋转
3.B树
mysql中主键索引的存储就是以B树的方式实现
4.2-3树
2-3 树是一种绝对平衡的二叉树, 它的左右子树的高度都是相同的,且2-节点可以存储一个元素,3-节点可以存储两个元素,当一个节点容纳了3个元素需要进行分裂操作
再新增数据17,之后需要分裂操作,但发现分裂之后,子节点高度不一致需要聚合操作
再新增数据40,先进行聚合操作
聚合之后再进行分裂操作
再新增数据27,28
聚合操作之后
5.红黑树
满足条件
1.每个叶子节点必须是黑色
2.从任意节点到叶子节点,经过的黑色节点数量是一样多的
3.如果一个节点是红色,那么它的左右节点一定都是黑色
5.1红黑树插入元素
元素新增顺序: