Appearance
题目
已知平衡二叉树 (AVL 树) 高度为 4(根节点高度记为 1),则其根节点的左右子树的节点数之差最多为()。
错因
A
把"平衡因子绝对值 ≤ 1"误解成"左右子树节点数之差 ≤ 1"。AVL 的平衡条件约束的是子树高度差,而不是节点数差。哪怕高度只差 1,节点数也可以差很多——比如高度 3 的满二叉树有 7 节点,高度 2 的最少节点 AVL 子树只有 2 节点,差 5。
B
可能用"左子树最多节点 − 右子树最多节点"的思路:左右都最多时(都是高度 3 的满二叉树),各 7 节点,差 0,并不是 2。或者用"高度 3 满 7 − 高度 2 满 5 = 2",但这要求两边都"满",没把"右边可以最瘦"利用起来。
C
按"AVL 严格平衡 → 左右子树高度必须相等"算,左右都取高度 3:左最多 7、右最少 4(高度 3 的最少节点 AVL:N(3)=N(2)+N(1)+1=2+1+1=4)→ 差 3。错在"左右子树高度必须相等"——AVL 允许左右子树高度差为 1,本题让一棵高 3、另一棵高 2 才能拉开节点差。
总解析
条件回顾:AVL 树高度 4(根算第 1 层),求根的左右子树节点数差的最大值。
思路:让一棵子树尽量胖、另一棵尽量瘦。
Step 1:高度约束
整棵树高度 4 → 至少有一棵子树高度 3(否则整树高度只到 3)。AVL 平衡条件允许另一棵子树高度比这棵差 1,即高度 2。
最佳分配:胖的子树高 3,瘦的子树高 2。
Step 2:胖子树最多节点
高度 3 的二叉树最多节点 = 满二叉树 = 。
Step 3:瘦子树最少节点(AVL 高度 h 最少节点的递推)
| h | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| N(h) | 1 | 2 | 4 | 7 |
高度 2 的最少节点 = N(2) = 2。
Step 4:节点数之差
举例验证(一棵高度 4 的合法 AVL):
root
/ \
(高3满) (高2最少)
7节点 2节点整棵树高度 4,根的左右子树高度差 |3-2|=1 ≤ 1(AVL 合法),节点差 5。
最终答案是 D。