Skip to content

2010年 408 数据结构 第 4 题

数据结构2010年选择题2分

题目

在下图所示的平衡二叉树中,插入关键字 48 后得到一棵新平衡二叉树。在新平衡二叉树中,关键字 37 所在结点的左、右子结点中保存的关键字分别是( )。

2413533790

错因

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 旋转步骤

  1. 先对 53 做右旋,37 上升:

    • 37 取代 53 成为 24 的右孩子
    • 37 的原右孩子 48 变成 53 的新左孩子
    • 53 变成 37 的右孩子
  2. 再对 24 做左旋,37 上升:

    • 37 成为新根
    • 24 变成 37 的左孩子(24 的右孩子变为空)
    • 53(带 48 和 90)成为 37 的右孩子

旋转后的树

       37
      /  \
    24    53
   /     /  \
  13    48   90

37 的左孩子 = 24,右孩子 = 53

最终答案是 C(24, 53)

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数