2025.07.25 答疑工作

二叉排序树(二叉搜索树)

首先显然是二叉树,就是每个节点最多有两个儿子。

性质,有序性:

  • 每个节点的值之间都是严格可比的
  • 对任意节点,其左子树的所有节点 < 该节点的值,其右子树的所有节点 > 该节点的值。(实际上我们可以重定义偏序,考试的时候还是按左边那样写,那是一种约定俗称的默认情况。多解释了反而老师可能不懂。)

核心操作

  • 搜索:从 root 开始。
    • root 是空节点,不存在。
    • 否则比较当前节点值与目标值
      • 相同,找到。
      • 目标值更小,进入左子树。更新子树 root 。
      • 目标值更大,进入右子树。更新子树 root 。
  • 插入:
    • 从 root 开始。
    • root 是空节点,插入。
    • 否则比较当前节点值与目标值
      • 相同,找到。
      • 目标值更小,进入左子树。更新子树 root 。
      • 目标值更大,进入右子树。更新子树 root 。
  • 删除:
    • 叶子节点。直接删除。
    • 非叶子节点。用左子树的最大值或右子树的最小值替代,并递归删除替代节点。
      • 解释 1 。左子树的最大值显然大于左子树的其他值,且依旧小于右子树的任意值。右子树的最小值显然依旧大于左子树的任意值,其小于右子树的其他值。
      • 解释 2 。递归删除。dfs(u, x) 时,如果 u 满足条件,我们要用 u 替代 v ,此时 u 又要被的删除,于是成了一个子问题,继续向下递归。

每个操作的最坏复杂度,显然是 \(O(n)\) ,比如严格左斜树或严格右斜树(注意是斜不是偏)。平均复杂度,\(O(\log n)\) ,不太会证。

平衡二叉树(特殊的二叉搜索树)

性质

  • 二叉搜索树的所有性质
  • 平衡性。对于平衡树的任一节点,左子树高度减去右子树高度的绝对值小于等于 \(1\)
    • 平衡性有什么用?显然平衡性可以让二叉搜索树的查找、插入、删除操作最坏是 \(O(\log n)\) 。(除了最后一层,都是满的,但注意不是完全二叉树,我们分析复杂度的时候可以近似当作满二叉树去分析)
    • 怎么做到?动态调整树的结构。比如旋转。

接下来是平衡树大杂烩的原理+源码链接,应该有红黑树(工程上常用),AVL 树(经典),Treap,Splay Tree(两个竞赛中常用)。先鸽一会儿……最近要学的南大 OS 和启元算法训练营更重要……

格雷编码

昨天稍微学了下哈夫曼编码,现在学学格雷编码……

P11376 [GESP202412 六级] 运送物资

posted @ 2025-07-25 05:32  03Goose  阅读(10)  评论(0)    收藏  举报