Py算法与数据结构

10 平衡树

AVL 旋转、树高控制、红黑与 B 树

对应本节 12 道题。点击题目展开答案和理由,保留此前生成的详细解析。
第 01 题 问题 1

本教材空树高度 0、叶高度 1,平衡因子如何定义?

参考答案

左子树高度减右子树高度。

解析

这是本套约定;其他资料可能反号,必须一致。

第 02 题 问题 2

AVL 允许的平衡因子有哪些?

参考答案

−1、0、1。

解析

每个节点都应满足,不是只要求根满足。

第 03 题 问题 3

插入 [30,20,10] 的失衡类型和修复?

参考答案

LL 型,对 30 右旋。

解析

20 成为子树根,10、30 分居两侧。

第 04 题 问题 4

插入 [10,20,30] 的修复?

参考答案

RR 型,对 10 左旋。

解析

20 成为子树根,保持中序顺序。

第 05 题 问题 5

插入 [30,10,20] 的修复?

参考答案

LR 型:先对左孩子 10 左旋,再对 30 右旋。

解析

不能用单次右旋解决折线结构。

第 06 题 问题 6

插入 [10,30,20] 的修复?

参考答案

RL 型:先对右孩子 30 右旋,再对 10 左旋。

解析

双旋把中间键 20 提到子树根。

第 07 题 问题 7

旋转是否改变中序键顺序?

参考答案

不会,正确旋转保留 BST 顺序。

解析

只改变局部链接与高度,不重新定义键的大小。

第 08 题 问题 8

旋转后应先更新哪个节点高度?

参考答案

先更新降下去的旧根,再更新新的子树根。

解析

新根高度依赖其孩子的新高度。

第 09 题 问题 9

AVL 删除只需修复删除点一次就能保证全树平衡吗?

参考答案

不一定。

解析

删除后的高度变化可能向上传播,需要沿祖先路径检查。

第 10 题 问题 10

红黑树是否要求每个节点两侧高度最多差 1?

参考答案

不要求,那是 AVL 的局部约束。

解析

红黑树用颜色、红节点约束与黑高约束控制总体树高。

第 11 题 问题 11

红黑树中红节点的孩子和根颜色应怎样(常规约定)?

参考答案

红节点孩子必须黑;根为黑。

解析

NIL 叶视为黑,各根到 NIL 路径黑节点数相同。

第 12 题 问题 12

数据库的磁盘索引为什么常用 B/B+ 树而非简单二叉树?

参考答案

较高分支度把多个键放入页,降低树高与页读写次数。

解析

关注块 I/O 与局部性;AVL/红黑树偏向内存二叉搜索结构。