Skip to content

2013年 408 数据结构 第 3 题

数据结构2013年选择题2分

题目

若将关键字 1,2,3,4,5,6,7 依次插入到初始为空的平衡二叉树 T 中,则 T 中平衡因子为 0 的分支结点的个数是( )。

错因

A

误以为依次插入升序数据,AVL 树会一边倒、不可能存在平衡因子为 0 的节点。但 AVL 的旋转机制就是为了修复这种偏斜——本题恰好 7 个节点能填出一棵满二叉树,每个分支节点左右子树完全等高,BF=0 的分支节点不只存在,而且全是

B

只看了根节点(最终根是 4,BF=0),忘了树里还有 2 和 6 这两个内部分支节点,它们各自的左右子树也都是单节点(高度 1 == 高度 1),同样 BF=0。

C

数到了 4 和某一个内部节点(比如 2 或 6),漏掉了另一个。升序插入 7 个连续整数经过若干次左旋后会变成完全平衡的满二叉树,三个分支节点(4、2、6)BF 全是 0,没有一个非零。

总解析

逐步插入 + 失衡修复过程(BF = 左子树高 − 右子树高):

步骤操作树结构(紧凑括号)旋转
1插 11
2插 21(_, 2)
3插 3 → 1 失衡(BF=−2,RR 型)2(1, 3)对 1 左旋
4插 42(1, 3(_, 4))
5插 5 → 3 失衡(BF=−2,RR 型)2(1, 4(3, 5))对 3 左旋
6插 6 → 2 失衡(BF=−2,RR 型)4(2(1, 3), 5(_, 6))对 2 左旋
7插 7 → 5 失衡(BF=−2,RR 型)4(2(1, 3), 6(5, 7))对 5 左旋

最终的树

4213657

统计 BF=0 的分支结点(叶子 1、3、5、7 不算分支结点):

节点左子树高右子树高BF是否分支
4220
2110
6110

三个分支节点 BF 全为 0。

背景观察:连续整数升序插入 AVL 树,每当节点数达到 (即 1、3、7、15、…)时,树形恰好是高度 满二叉树——所有非叶节点都 BF=0。本题 正好踩在这个特殊点上,所以答案才是"3 个全部"而不是"少于 3"。

最终答案是 D(3)

最后更新:

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

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