1. 题目背景与核心考点解析
2010年考研408计算机学科专业基础综合的第5题,是一道典型的数据结构中关于树的性质计算题。这类题目在历年408考试中频繁出现,主要考察以下几个核心能力:
- 树的基本性质理解(度数、层次、节点关系)
- 握手定理(Handshaking Lemma)的灵活应用
- 通过已知条件建立方程求解未知数的能力
- 对特殊树结构(如完全二叉树、满二叉树)特性的掌握
这道题的具体表述是:已知一棵度为4的树中,有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,问该树有多少个叶子结点?
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 树的基本概念复习
2.1 树的度与节点类型
在树结构中,每个节点的"度"(degree)是指该节点拥有的子节点数量。根据度的不同,节点可以分为:
- 内部节点(非叶子节点):度大于0
- 叶子节点:度为0(没有子节点)
题目中给出了四种不同度数的节点数量:
- 度为4的节点:20个
- 度为3的节点:10个
- 度为2的节点:1个
- 度为1的节点:10个
2.2 树的总节点数计算
设树的总节点数为N,叶子节点数为L。根据题意可以建立以下关系:
N = 度4节点 + 度3节点 + 度2节点 + 度1节点 + 叶子节点
= 20 + 10 + 1 + 10 + L
= 41 + L
3. 握手定理的应用
3.1 握手定理原理
握手定理是解决这类问题的关键工具,它有两个等价表述:
- 树中所有节点的度数之和 = 2 × (树中边数)
- 在任意树中,总度数 = 2 × (N - 1),其中N是节点总数
这是因为:
- 树是一种无向无环连通图,有N-1条边
- 每条边会被两个节点"共享",所以总度数是边数的两倍
3.2 建立方程求解
根据握手定理,我们可以计算总度数:
总度数 = (4×20) + (3×10) + (2×1) + (1×10) + (0×L)
= 80 + 30 + 2 + 10 + 0
= 122
根据握手定理的第二种表述:
总度数 = 2 × (N - 1) = 2 × (41 + L - 1) = 2 × (40 + L)
因此有方程:
2 × (40 + L) = 122
80 + 2L = 122
2L = 42
L = 21
所以这棵树有21个叶子节点。
4. 验证与思考
4.1 结果验证
让我们验证一下这个结果是否合理:
总节点数 N = 41 + 21 = 62
根据握手定理:
总度数 = 2 × (62 - 1) = 122
与我们之前计算的各类节点总度数一致,验证通过。
4.2 常见错误分析
在解决这类问题时,考生常犯以下错误:
- 忽略根节点的特殊性:有些同学会错误地认为根节点需要特殊处理,实际上握手定理已经考虑了所有节点
- 混淆"树的度"和"节点的度":树的度是指树中所有节点度的最大值,而题目中已经明确是每个节点的度
- 计算总度数时漏乘系数:比如忘记将节点数量与对应度数相乘
- 建立方程时符号错误:特别是把N和L的关系搞混
4.3 解题技巧总结
- 明确题目给出的所有条件,用变量表示未知量
- 正确理解和应用握手定理的两种表述形式
- 建立方程时注意单位的统一(都是"度"的概念)
- 解方程后最好进行验证,确保结果合理
- 对于复杂情况,可以画简单的示意图辅助理解
5. 同类题目拓展练习
为了巩固这个知识点,我们来看几个类似的题目:
5.1 例题1
一棵度为3的树中,有10个度为3的结点,5个度为2的结点,问有多少个叶子结点?
解法:
设叶子结点数为L
总节点数 N = 10 + 5 + L = 15 + L
总度数 = 3×10 + 2×5 + 0×L = 30 + 10 = 40
根据握手定理:40 = 2 × (N - 1) = 2 × (14 + L)
解得:L = 6
5.2 例题2
一棵二叉树中,度为2的结点有15个,度为1的结点有30个,问叶子结点有多少个?
解法:
这是二叉树,所以每个节点的度不超过2
设叶子结点数为L
总节点数 N = 15 + 30 + L
总度数 = 2×15 + 1×30 + 0×L = 30 + 30 = 60
根据握手定理:60 = 2 × (N - 1) = 2 × (44 + L)
解得:L = 16
5.3 例题3(综合题)
一棵树中,度为5的结点有4个,度为4的结点有3个,度为3的结点有2个,度为1的结点有10个,其余都是叶子结点。若该树有100条边,问叶子结点有多少个?
解法:
已知边数 = 100,所以总节点数 N = 100 + 1 = 101
设叶子结点数为L
根据节点数关系:4 + 3 + 2 + 10 + L = 101 ⇒ L = 82
验证:
总度数 = 5×4 + 4×3 + 3×2 + 1×10 + 0×82 = 20 + 12 + 6 + 10 = 48
根据握手定理:总度数 = 2 × 边数 = 200
这里出现矛盾,说明题目数据有问题(实际考试中不会出现这种情况)
6. 实际应用场景
虽然这看起来是一道理论题,但树的结构在计算机科学中有广泛应用:
- 文件系统:目录树结构
- 数据库索引:B树、B+树
- 网络路由:前缀树(Trie)
- 编译器:语法分析树
- 机器学习:决策树
理解树的节点关系对于优化这些数据结构至关重要。例如,在数据库索引中,知道B树的节点分支数量(度)与树高的关系,可以帮助我们预估查询性能。
7. 高级话题延伸
7.1 不同树结构的特性
- 二叉树:每个节点最多有两个子节点
- 完全二叉树:除了最后一层,其他层都满,且最后一层节点靠左
- 满二叉树:所有非叶子节点都有两个子节点,所有叶子在同一层
- B树:多路搜索树,用于数据库和文件系统
7.2 树的遍历与应用
理解节点数量关系有助于分析遍历算法的复杂度:
- 前序遍历
- 中序遍历
- 后序遍历
- 层次遍历
例如,对于有N个节点的二叉树,各种遍历的时间复杂度都是O(N),因为每个节点恰好被访问一次。
7.3 树的平衡性
在实际应用中,我们常常需要保持树的平衡以确保操作效率:
- AVL树:通过旋转保持平衡
- 红黑树:通过着色规则保持近似平衡
- B树:通过节点分裂合并保持平衡
理解节点度数与此类操作的关系,是设计高效数据结构的基础。
