有序数组:
一组数据按照从小到大的顺序连续存放。
如何查找一个元素?
二分算法:
如果我们要找的值是x,先找数组中间的一个元素,如果比x大就去左边找,比x小就去右边。
时间复杂度log(n)。
如何插入一个元素?
插入n个元素时间复杂度n^2。
搜索树:
有一个父节点,这个节点左边的节点值都比他小,右面的节点值都比他大。
查找效率
根据规则判断是进入左子树还是右子树。
时间复杂度log(n)。
插入效率
根据规则判断是进入左子树还是右子树。
时间复杂度log(n)。
特殊情况
当我们要插入一组有序的数据如:1 2 3 4 5 6
树的结构变成了:
此时查找的时间复杂度n
AVL树:
AVL 树得名于它的发明者 G. M. Adelson-Velsky 和 Evgenii Landis,他们在1962年的论文《An algorithm for the organization of information》中公开了这一数据结构。
结构和搜索树大致相同,但是加入了约束条件,平衡因子。
平衡因子:左子树的高度与右子树的高度差。
在AVL树中,如果左子树和右子树高度差的绝对值>1需要进行旋转操作调整树的结构。
调整方法
如图是一种左旋方法。通过旋转,让树从不平衡变成平衡的了,同时也降低了树的高度。
查找效率和插入效率都是log(n)。
缺点
平衡条件特别容易打破,插入时需要进行多次旋转。
红黑树:
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或
Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路
径会比其他路径长出俩倍,因而是接近平衡的。
红黑树性质:
1. 每个结点不是红色就是黑色
2. 根节点是黑色的
3. 如果一个节点是红色的,则它的两个孩子结点是黑色的
4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点
5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)
调整方法
情况1:
情况2:
情况3:
情况4:
虽然调整更复杂,但是红黑树调整次数比AVL树大大减少,效率还是比AVL树优秀。
这种也是可以存在的,如果是AVL树就还需要多次调整右边的子树。