假设二叉树叶节点的高度为 $1$,则结点总数为 $1234$ 的完全二叉树的高度是( )。
这题别急着套公式,先抓住完全二叉树最核心的性质:节点总数 n 决定了层数,而题目给的 1234 是个偶数,这意味着最后一层一定不是满的,得用层数公式反推高度,再结合叶子节点高度为 1 这个定义去校验。
最容易栽跟头的就是把 1234 当成奇数去算叶子数,或者直接用 log2(1234) 四舍五入就选答案,完全忽略了完全二叉树最后一层节点靠左排列的特性。还有人会死记硬背‘高度 h 的完全二叉树最少节点是 2^(h-1)+1',然后硬套进去算出 1234 对应的 h 是 10,却忘了题目里叶子高度是 1,这意味着根节点高度是 12,这俩高度定义体系不统一,直接导致选错 C 或 B。
这道题考的是完全二叉树的节点数与高度的关系,以及二叉树高度的定义(根节点高度为 1)。命题人特意把叶子节点高度定为 1,就是为了考察你对‘高度’这个概念的理解是否扎实,而不是死记硬背公式。
拿到 1234 这个数,首先得判断它在二叉树里的位置。完全二叉树有个铁律:若节点总数 n 为偶数,则 n/2 个节点是叶子;若 n 为奇数,则 (n+1)/2 个是叶子。1234 是偶数,所以叶子数就是 617 个。但这题问的是高度,叶子数只是个辅助信息,核心还是看层数。
高度怎么算?完全二叉树的高度 h 满足:2^(h-1) < n <= 2^h。也就是说,h-1 层是满的,节点数 2^(h-1)-1,加上第 h 层至少 1 个节点,总数就超过 2^(h-1)。代入 n=1234,我们算一下:2^10 = 1024,2^11 = 2048。显然 1024 < 1234 <= 2048,所以 h-1 = 10,h = 11。这就是答案 D 的由来。
这里有个巨大的坑:很多同学看到 1234 接近 1024,就以为高度是 10(选项 C)。为什么错?因为 2^10 是 1024,对应的是高度为 11 的树的最小节点数(满 10 层 +1 个叶子)。如果你算成高度 10,那意味着 2^9 = 512 是满层,总数最多 1023,根本装不下 1234 个节点,逻辑上就不成立。
再回头看看题目给的叶子高度为 1 这个条件。在标准定义里,根节点高度是树的高度。如果叶子高度是 1,那根节点高度就是 12。这会不会影响答案?不会。因为题目问的是‘结点总数为 1234 的完全二叉树的高度’,这里的‘高度’默认指树的高度(根到叶子最长路径的节点数),也就是我们刚才算的 11。叶子高度为 1 只是告诉你这棵树不是退化成一条线,而是有分叉的,确保你用的是二叉树的高度公式,而不是链表的高度公式。
考频趋势看,完全二叉树节点数与高度的关系是近五年 CSP-J/S 的高频考点,尤其是结合偶数节点判断最后一层是否满,几乎年年变着花样考。2023 年考了类似逻辑但数字不同,2022 年考过叶子数计算,2024 年这次直接问高度,属于基础公式的灵活应用。
预测未来,命题人可能会继续在这个点上挖坑,比如给一个奇数节点让你算叶子数,或者反过来给高度让你求节点范围。但只要记住那个不等式 2^(h-1) < n <= 2^h,以及偶数节点叶子数就是 n/2,这类题基本就能秒杀。所以选 D,稳稳的。