【数据结构】二叉树小题

一、真题 1:前序 + 后序遍历反推中序(2011 年)

核心原理

二叉树的遍历规则:

  • 前序遍历:根节点 → 左子树 → 右子树
  • 中序遍历:左子树 → 根节点 → 右子树
  • 后序遍历:左子树 → 右子树 → 根节点

关键结论

  1. 仅通过前序 + 后序遍历,无法唯一确定一棵二叉树,但可以确定根节点、父子关系,以及每个节点的子树方向(左 / 右)。
  2. 若前序序列与后序序列完全逆序,说明这棵二叉树是单支树(每个节点最多只有一个子节点,要么全是左孩子,要么全是右孩子)。

解题分析

已知前序[1,2,3,4]、后序[4,3,2,1],可直接确定:

  • 根节点是1(前序第一个,后序最后一个)
  • 21的子节点,32的子节点,43的子节点,整棵树为单支链结构

我们逐一验证选项:

  • A 选项 1,2,3,4 :对应右单支树 (每个节点只有右孩子)结构:1→右孩子2→右孩子3→右孩子4前序:1,2,3,4,后序:4,3,2,1,符合条件 ✅
  • B 选项 2,3,4,1 :对应左单支树 + 右单支混合 结构:1的左孩子2→右孩子3→右孩子4前序:1,2,3,4,后序:4,3,2,1,符合条件 ✅
  • C 选项 3,2,4,1 :若中序为3,2,4,1,则根1的左子树为[3,2,4]前序中1之后的子序列为[2,3,4],后序中1之前的子序列为[4,3,2]此时2作为左子树的根,中序中2的左子树为[3]、右子树为[4],则2有两个孩子,不再是单支树,前序会变为1,2,3,4,但后序会变为3,4,2,1,与题目后序4,3,2,1矛盾 ❌
  • D 选项 4,3,2,1 :对应左单支树 (每个节点只有左孩子)结构:1→左孩子2→左孩子3→左孩子4前序:1,2,3,4,后序:4,3,2,1,符合条件 ✅

答案:C


二、真题 2:先序与中序序列相同的条件(2017 年)

核心原理

先序遍历:根 → 左 → 右中序遍历:左 → 根 → 右

若两者序列完全相同,说明遍历顺序完全一致,即左子树必须为空(否则先序会先访问根,中序会先访问左子树,序列必然不同)。

解题分析

  • 若每个非叶节点只有右子树 (左子树为空):先序遍历:根 → 空 → 右子树根 → 空 → ...中序遍历:空 → 根 → 右子树根 → 空 → ...两者序列完全一致 ✅
  • 若只有左子树:先序为根→左→右,中序为左→根→右,序列必然不同 ❌
  • 度为 1 的节点可能是左孩子或右孩子,若为左孩子则序列不同 ❌
  • 度为 2 的节点有左右子树,序列必然不同 ❌

答案:B

补充验证

我们用 3 个节点的树举例:

  • 右单支树:1→右2→右3先序:1,2,3,中序:1,2,3,完全一致
  • 左单支树:1→左2→左3先序:1,2,3,中序:3,2,1,完全相反

三、真题 3:二叉树顺序存储的最小单元数(2020 年)


解析

1. 二叉树顺序存储的核心规则

二叉树的顺序存储,是按照完全二叉树的层序遍历顺序,将结点依次存入数组中。

  • 对于完全二叉树,数组大小刚好等于结点数,无浪费;
  • 对于非完全二叉树,必须为缺失的结点预留空的存储单元,以保证父子结点的下标关系(左孩子下标 = 2× 父结点下标,右孩子下标 = 2× 父结点下标 + 1)成立。
2. 高度为 h 的二叉树的顺序存储最大单元数

高度为h的二叉树,顺序存储需要的最大存储单元数,等于高度为 h 的满二叉树的结点总数,公式为:2h−1本题中树的高度为 5,因此满二叉树的结点总数为:25−1=32−1=31

3. 为什么不能选更小的数

题目要求的是存放该二叉树需要的存储单元至少是多少 ,这里的 "至少" 是指:无论这棵高度为 5、10 个结点的二叉树是什么形态,都能存下的最小通用空间

  • 高度为 5 的二叉树,最深层的结点在第 5 层,其在顺序存储中的下标最大为25−1=31,因此数组必须至少开到 31 个单元,才能覆盖所有可能的结点位置。
  • 选项 B (16)、C (15)、D (10) 都无法覆盖高度为 5 的二叉树的最大下标,因此不可能满足要求。

答案A. 31


补充说明

  • 顺序存储的本质是按完全二叉树的结构映射,因此树的高度直接决定了数组的最小长度,与实际结点数无关(只要高度确定,数组长度至少为2h−1)。
  • 本题中 10 个结点是干扰项,核心约束是高度为 5,因此直接用满二叉树公式计算即可。

四、考点总结与解题技巧

核心考点梳理

考点 核心结论 解题技巧
遍历反推 前序 + 后序无法唯一确定树,中序是唯一能确定树的关键 先找根,再分左右子树,递归验证
遍历序列相同 先序 = 中序 → 无左子树(只有右子树);中序 = 后序 → 无右子树(只有左子树) 直接用遍历规则推导,排除法验证
顺序存储 按完全二叉树层序编号存储,高度 h 的树需2^h -1个单元 区分实际节点数和预留单元数,不要混淆

避坑指南

  1. 单支树的遍历特性:全右单支树的先序 = 中序,全左单支树的后序 = 中序,前序与后序逆序
  2. 顺序存储的本质:是为完全二叉树设计的,非完全二叉树必须补空节点,因此单元数远大于实际节点数
  3. 遍历反推的边界:前序 + 后序只能确定根和父子关系,无法确定子树方向,因此会有多种可能的中序序列
相关推荐
故事和你911 小时前
洛谷-算法2-1-前缀和、差分与离散化1
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
知识浅谈8 小时前
DeepSeek V4 和 GPT-5.5 在同一天发布了??我也很懵,但对比完我悟了
算法
DeepModel8 小时前
通俗易懂讲透 Q-Learning:从零学会强化学习核心算法
人工智能·学习·算法·机器学习
田梓燊8 小时前
力扣:19.删除链表的倒数第 N 个结点
算法·leetcode·链表
简简单单做算法10 小时前
基于GA遗传优化双BP神经网络的时间序列预测算法matlab仿真
神经网络·算法·matlab·时间序列预测·双bp神经网络
阿豪学编程10 小时前
面试题map/unordered相关
数据结构
guygg8810 小时前
利用遗传算法解决列车优化运行问题的MATLAB实现
开发语言·算法·matlab
武藤一雄10 小时前
19个核心算法(C#版)
数据结构·windows·算法·c#·排序算法·.net·.netcore
sali-tec11 小时前
C# 基于OpenCv的视觉工作流-章52-交点查找
图像处理·人工智能·opencv·算法·计算机视觉
梦想的颜色11 小时前
mongoTemplate + Java 增删改查基础介绍
数据结构·数据库·mysql