数据结构

搜索二叉树

左子树小于根小于右子树,中序遍历升序有序

平衡二叉树(AVL树)

严格平衡,左子树和右子树高度差不超过1,通过旋转平衡,O(log n)

红黑树

规则:

  • 节点要么是红色要么是黑色
  • 根节点一定是黑色
  • 叶子节点(NIL)一定是黑色
  • 红色节点的子节点一定是黑色的
  • 一个节点到他的每个叶子节点一定经过相同数量的黑色节点

近似平衡,最长路径不超过最短路径的 2 倍,O(log n)

B树

平衡n叉树 key数量是子树数量-1 B 树除了“平衡”,还有严格的节点规则(设最小度数 t):

  • 除根节点外,每个节点至少有 t-1 个 key
  • 每个节点最多有 2t-1 个 key(也就是最多 2t 个子节点)
  • 所有叶子在同一层(这是“平衡”的体现)
  • 节点内的 key 有序,查找时在节点内二分 + 选子树往下走

B+树

和B树相比key和子树数量是一致的 叶子节点用链表链起 只在叶子节点存 record/指针

完全二叉树,通常用数组存储(下标 i 的父节点 (i-1)/2,左/右孩子 2i+12i+2

  • 大根堆:父 ≥ 子,堆顶是最大值
  • 小根堆:父 ≤ 子,堆顶是最小值

核心操作:

  • 插入:尾插后向上调整(sift up),O(log n)
  • 删除堆顶:堆顶与末尾交换,删末尾,向下调整(sift down),O(log n)
  • 建堆:自底向上 heapify,O(n)(不是 n 次插入的 O(n log n))
  • 取最值:O(1)

典型应用:优先队列、Top K、堆排序、Dijkstra / 多路归并

与 BST 对比:堆只保证「父子大小关系」,不保证左右有序;找全局最值 O(1),但查任意元素无序

哈希表

数组+链表 解决哈希冲突:链地址,开放寻址(线性探测,二次探测)

查找一般用什么数据结构?

最常用的是哈希表(HashMap),平均查找复杂度 O(1)。

如果需要有序查找或范围查询,则使用平衡二叉树(O(log n))。

对于数据库索引,通常使用 B+ 树。


数据结构
https://yaoyablog.xyz/2026/06/03/study/数据结构/数据结构面试知识点/
作者
Yaoyawen
发布于
2026年6月3日
许可协议