平衡二叉树(BST)
定义:
任意节点的左右子树高度差不能超过1
为什么:
有可能出现spindly的树,让树logn的效率退化为n的链表
那为什么不随机位置加节点?
因为要用它构建map,需要找对应的位置
解决方法;旋转
旋转可以缩短或者加长树高度,保护了树的特性不会退化成链表
什么时候?
每次删除或者插入的时候
类型:
区别:不同的旋转方法,2-3树和b树不用旋转
AVL树
红黑树
- 红色链总是向左
- 没有节点有两个红色链
- 从root到每一个子叶都有同样数量的黑色链
- 也被称为(LLRB)
- 2-3树都有一个对应的红黑树,红黑树不可能是二叉树的两倍高度
2-3树
-
理念:如果我永远不加新的子叶,就不会出现不平衡的情况
-
所以选择一个节点里放多个元素。但是如果不限制数量也会出问题
-
如果一个节点里超过了限制数量,就把他递给父类
-
2是一个节点里有多少元素
-
3是一个节点有多少子叶
-
填满了之后就往上移动,然后分裂
-
增加高度的唯一方式就是分裂
B树
2-3树和2-3-4树也是B树的一种,但是通常说B树是指M很