1032 字
3 分钟
考研专业课学习记录2026-06-25
2026-06-25

考研专业课学习记录 | 2026-06-25#

今日学习内容#

今天主要复习了树、森林、二叉树的相互转换方法以及树的孩子兄弟表示法,树的双亲表示法

AI知识点带复盘#

1. 树的经典存储表示法#

(1)双亲表示法#

双亲表示法属于树的顺序存储结构,通过连续数组存储树的所有结点,每个结点附加一个指示器记录其双亲结点在数组中的下标,根结点的双亲下标通常设为-1或0。考研常考的结构定义代码框架如下:

#define MAX_TREE_SIZE 100
typedef struct {
ElemType data;
int parent; // 双亲结点的数组下标
} PTNode;
typedef struct {
PTNode nodes[MAX_TREE_SIZE];
int node_num; // 树的结点总数
} PTree;

该结构的优势是可以在O(1)时间内快速查找任意结点的双亲结点,但查找结点的孩子需要遍历整个数组,时间复杂度为O(n),适合以双亲查询为核心操作的场景。

(2)孩子兄弟表示法(二叉链表表示法)#

孩子兄弟表示法是树的链式存储结构,将树转化为二叉链表形式,每个结点包含数据域、第一个孩子结点指针和右兄弟结点指针,结构定义如下:

typedef struct CSNode {
ElemType data;
struct CSNode *firstchild; // 指向第一个孩子结点
struct CSNode *rightsib; // 指向当前结点的右兄弟结点
} CSNode, *CSTree;

该表示法是树与二叉树相互转换的核心结构,可以将任意树/森林转化为唯一对应的二叉树,同时简化了树的遍历、路径查询等操作,考研中常考察该结构的代码实现与转换规则。

2. 树、森林与二叉树的相互转换#

该知识点是408数据部分的高频考点,核心依托孩子兄弟表示法实现:

(1)树转二叉树#

转换步骤分为三步:

  1. 加线:为树中所有兄弟结点添加虚线连线;
  2. 去线:仅保留每个结点与第一个孩子的连线,删除其余孩子间的兄弟连线;
  3. 调整:将所有兄弟连线旋转为右子树形式,最终得到唯一对应的二叉树,且转换后的二叉树根结点无右子树。

(2)森林转二叉树#

先将森林中的每一棵独立树分别转换为二叉树,再将后续每一棵二叉树的根结点作为前一棵二叉树根结点的右子树进行拼接,即可得到对应森林的二叉树。

(3)二叉树转树/森林#

逆向转换流程:

  1. 若二叉树根结点存在右子树,则该右子树对应原森林中的其他树;若无右子树,则对应单棵树;
  2. 对于任意结点,其左子树的所有结点均为该结点的孩子结点,右子树的所有结点均为该结点的兄弟结点。

问题与反思#

  1. 对森林转二叉树时多棵树的拼接顺序容易混淆,需要结合具体实例反复练习强化;
  2. 双亲表示法中遍历结点所有孩子的优化实现思路尚未完全理清,后续需要补充相关算法练习;
  3. 两种树存储结构的适用场景记忆不够牢固,需要结合历年真题考点进行对比总结。

收获与总结#

  1. 完整梳理了树的两种经典存储结构的原理、代码实现与优缺点,明确了双亲表示法与孩子兄弟表示法的适用场景差异;
  2. 掌握了树、森林与二叉树相互转换的核心规则与操作步骤,可以独立完成简单实例的转换练习;
  3. 明确了该部分知识点在408考研中的高频考察形式,包括结构定义、转换操作、算法应用等方向。

💡 碎碎念:踏实吃透每一个知识点!

文档内容由 AI 辅助生成

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

考研专业课学习记录2026-06-25
https://elysiaweb.vercel.app/posts/408/6-25/
作者
程翊雪
发布于
2026-06-25
许可协议
Unlicensed

部分信息可能已经过时

目录