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 六级] 运送物资
——永远是挑战而不是练习,下次一定更好。
浙公网安备 33010602011771号