Appearance
题目
在下图所示的平衡二叉树中,插入关键字 48 后得到一棵新平衡二叉树。在新平衡二叉树中,关键字 37 所在结点的左、右子结点中保存的关键字分别是( )。
错因
A
误认为旋转后 37 的左孩子是 13。旋转后 37 成为整棵树的根,其左子树根是 24;24 的左孩子是 13,但 13 不是 37 的直接孩子。混淆了"祖孙关系"和"父子关系"。
B
正确判断了 37 的左孩子是 24,但误判右孩子为 48。48 插入后作为 53 的左孩子(RL 旋转中间步),旋转完成后 48 成为 53 的左孩子,而非 37 的右孩子。37 的右孩子是 53,不是 48。
D
误认为 37 的右孩子是 90。90 是 53 的右孩子,在旋转后仍归属于 53 的右子树,未变成 37 的直接右孩子。选 D 的人可能只做了一半旋转(仅右旋 53,未完成后续左旋),得到了错误的中间状态。
总解析
插入 48 的过程:
初始树:24 为根,左 13,右 53(左 37,右 90)。
48 > 24 → 去右子树 53;48 < 53 → 去左子树 37;48 > 37 → 插入为 37 的右孩子。
检查平衡因子(BF = 左子树高 - 右子树高):
- 37:左 0,右 1(48),BF = −1 ✓
- 53:左高 2(37→48),右高 1(90),BF = +1 ✓
- 24:左高 1(13),右高 3(53→37→48),BF = −2 失衡
失衡点在 24,其右子树(53)BF = +1(左重),属于 Right-Left(RL)双旋 情况。
RL 旋转步骤:
先对 53 做右旋,37 上升:
- 37 取代 53 成为 24 的右孩子
- 37 的原右孩子 48 变成 53 的新左孩子
- 53 变成 37 的右孩子
再对 24 做左旋,37 上升:
- 37 成为新根
- 24 变成 37 的左孩子(24 的右孩子变为空)
- 53(带 48 和 90)成为 37 的右孩子
旋转后的树:
37
/ \
24 53
/ / \
13 48 9037 的左孩子 = 24,右孩子 = 53。
最终答案是 C(24, 53)。