Skip to content

2018年 408 数据结构 第 4 题

数据结构2018年选择题2分

题目

设一棵非空完全二叉树 T 的所有叶结点均位于同一层,且每个非叶结点都有 2 个子结点。若 T 有 k 个叶结点,则 T 的结点总数是( )。

错因

B

记成"叶结点数 × 2 等于总结点数"。它差的就是"减 1"——因为根那一层只有 1 个,不像其余层都翻倍。直觉上"k 个叶子,每个叶子的父亲算 1 个,再上去也算……"按贡献比例直接拍 2k 的人最常踩这个坑。

C

把题目和"按下标 索引的某种结构"混了。比如部分同学把 当成树的层数,错以为"满二叉树第 k 层有 个结点"——这个公式根本不存在(正确的是第 层有 个结点)。或者把树脑补成 的网格状结构。属于公式记忆错乱。

D

把题目里的 当成了层号而不是叶结点数。在满二叉树里,第 层(根为第 1 层)确实正好有 个结点,于是套上去得到 。但题目给的 k 是"叶结点数",不是层号——所以 D 答的是另一道题的答案。

总解析

题目描述的其实就是满二叉树:所有叶子在最深一层,所有非叶都有两个孩子。设这棵树深度为 (根为第 1 层,叶子在第 层)。

满二叉树两条基本性质:

  • 层(叶层)共有 个叶结点 → 题目的
  • 整棵树共有 个结点。

改写:

或者更直观:每个叶结点的"数量贡献"按层翻倍递推回去——最后一层 个,倒数第二层 ,再上去 ……一直到 1,构成等比数列:

两种推法殊途同归。

最终答案是 A(

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题