- 线性表数据结构
- 数组aray
- 内存地址连续
- 可以通过下标的成员访问,检索性能高
- 增删操作性能消耗高,需要保证数据不越界,动态扩容
- 队列queue
- FIFO
- 链表list
- 内存地址不连续,跳转结构
- 查询需要遍历,检索效率低
- 增删效率高,更改指针指向即可
- 单向链表,双向链表
- 栈stack
- LIFO,先进后出,后进先出
- 数组aray
- 非线性数据结构
-
树
- root唯一
- 子树没有限制且互相不相交
- 内存中不连续,做增删比数组效率高,查找是二分查找没有数组通过下标效率高,但是比链表效率高
- 度数:节点拥有的子树数目称为节点的度
- 层数从root层开始数
-
二叉树
- 每个节点至多拥有两节字数【不存在度大于2的节点】
- 二叉查找树
- 左子树的任意节点不为空的话,左子树的值均小于根节点的值
- 右子树的任意节点不为空的话,且右子树的值均大于根节点的值
- 任意节点的左右子树也分别是二叉查找树
- 没有值相等的节点
- 遍历操作
1. 先序遍历:根,左,右 2. 中序遍历:左,根,右 3. 后序遍历:左,右,根
- 最小值最大值前驱节点后继节点
-
查找最小值:沿着根节点的左子树一路查找,知道最后一个不为空的节点,该节点就是这个树的最小节点
-
查找最大值:沿着根节点的右子树一路查找,知道最后一个不为空的节点,该节点就是当前这个树的最大节点
-
前驱节点后继节点
-
查找前驱节点:小于当前节点的最大值
-
查找后继节点:大于当前节点的最小值
-
- 删除节点
- 删除之后,找前驱节点或后继节点来替代
- 叶子节点直接删除
- 有一个子节点用子节点代替
- 有两个子节点,需要找到替代节点
- 平衡二叉查找树 balanced BST
- BST存在的问题是极端情况下所有的节点都会在一条斜线上,高度为N,二平衡树在插入和删除的时候,会通过旋转操作将高度保持在LogN。查询效率更高。
1. AVL树【度数差不超过1,左旋右旋,开销较大】和红黑树【黑节点平衡】
-
2-3-4树
- 所有叶子节点都拥有相同深度
- 节点是2-节点,3-节点,4-节点之一
- 2-节点:包含1个元素的节点,有2个子节点
- 3-节点:包含2个元素的节点,有3个子节点
- 4-节点:包含3个元素的节点,有4个子节点
1. 所有节点必须至少包含1个元素
- 红黑树
-
起源于2-3-4树,本质是2-3-4树
-
2节点
- 一个2节点对应的红黑树节点就是一个黑色节点
-
3节点
- 一个3节点可以有两种情况的红黑树节点,一种是右倾一种是左倾,所以一个2-3-4树可以有多个红黑树
- 原则:上黑下红
-
4节点
- 中间节点黑色,左右节点红色,上黑下红
-
裂变状态
- 转换为红黑树后会先变色(不能有两个相邻的红色节点)
-
-
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交