数组缺点:在中间插入数据/删除数据慢
数组优点:可以进行折半查找(先排序)
链表优点:数据插入/删除快
链表缺点:不能进行二分查找(无下标)
树=数组优点(二分查找)+链表优点(插入删除快)
二叉树的表示:数组表示、链表表示
二叉树的遍历:先序、中序、后序(前三个用递归)层序(用队列)
BST:二叉查找树【中序遍历得到一个从小到大的数】
二叉查找树的性质
1、每一个元素有一个键值,而且不允许重复
2、左子树的键值都小于根节点的键值
3、右子树的键值都大于根节点的键值
4、左右子树都是二叉查找树
缺点:数据都在一边时,可能发生退化,变成链表【红黑树:能够平衡这种情况,可以使数据在两边分布】
红黑树:高级的二叉查找树
set、multiset、map、multimap都是红黑树
平衡树和非平衡树
红黑树特征:结点都有颜色,插入和删除结点时要遵守红黑规则
红黑规则:1、每一个结点不是红色就是黑色
2、根总是黑色
3、如果结点是红色,则它的子节点必须是黑色(不允许连续红,但允许连续黑)
4、从根到叶子结点的每条路径,必须包含相同数目的黑色结点
不满足上述规则时,修正方法:1、改变结点颜色 2、旋转