搜索与数据结构(BST、AVL 树、红黑树)| 青训营笔记

131 阅读1分钟

搜索与数据结构(BST、AVL 树、红黑树)

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记 主要用于快速理解的笔记,可能描述不足够详细!

发展历程:

—> 线性查找(性能低)

—> 二分查找(操作需要移动大量元素)

—> BST(不平衡,可能会退化成链表问题)

—> AVL 树(数据变化有频繁更新结构问题)

—> 红黑树

顺序搜索

特点

  • 线性搜索:从头到尾一一遍历
  • 复杂度 O(n)
  • Slow

二分搜索

特点

  • 有序的前提下,根据规律折半搜索区间
  • 复杂度 O(log 2 n)
  • Very fast
  • **插入/删除 **需要移动大量元素

二叉搜索树(B S T)

特点

  • 一颗二叉树,左子树 < 父节点 < 右子树
  • 和有序序列上的二分查找一样的查找效率
  • 插入/删除 不需要大量移动元素
  • 复杂度 O(h) 二叉树高度
  • 不平衡则会导致时间复杂度越来越高

二叉平衡树(A V L)

特点

  • 任何结点中,左子树和右子树高度相差不超过 1
  • 结点的平衡因子 = 右子树高度 - 左子树高度(或反之)
  • 失衡的四种情况:LL(右旋)、RR(左旋)、LR(先左旋,后右旋)、RL(先右旋,后左旋)
  • 不断调整很麻烦!

红黑树(R B T)

特点

自平衡的二叉查找树。

搜索效率 AVL > RBT

操作效率 AVL < BRT

概念

红黑树:

image.png

黑色高度

每个结点到叶子结点经过的黑色结点数

image.png

特点

  • 红树不能有红色子节点
  • 任何结点到达叶子结点,路径上黑树数量一定相同(空指针也是黑色的)
  • 插入:两红时,父亲有兄弟结点,则把父亲和他的兄弟变黑
  • 删除:两红时,父亲没有兄弟结点,根据 AVL 树的规律进行旋转;

image.png