重要知识点讲解
- 考研中只会涉及到两种树的存储,一是二叉树的存储方式,二是一般树的存储方式。
- 二叉树的存储方式,主要有两种:
- 链表存储:定义一个结构体,包含数据和左右节点的指针,指针将多个节点链接为一个二叉树。
struct BTree{
int data;
struct BTree* lchild;
struct BTree* rchild;
};
2. **数组存储**:用一个线性表,将二叉树的节点按照层次遍历的顺序依次存储—从上到下,从左到右。
-
一般树的存储方式**。**主要有三种
-
双亲表示法:每个节点都有两个部分组成,分别是自身的数据和其父结点
-
孩子表示法:把每个结点的孩子结点都用链表串起来
-
孩子兄弟表示法:这个存储方式是用来实现树与二叉树转换的。记住一个口诀:“左孩子,右兄弟”,如图所示节点的左指针指向第一个孩子,右指针指向其的兄弟(如果有多个兄弟依次串联)
-
-
对于森林的处理,一般会将森林转换为二叉树存储,与孩子兄弟表示法类似:将每一棵树的根节点看作兄弟结点,然后通过**”左孩子,右兄弟“**的口诀进行转换
题目
【2014统考真题】将森林F转换为对应的二叉树T,F中叶节点的个数等于()
A. T中叶结点的个数
B. T中度为1的结点个数
C. T中左孩子指针为空的结点个数
D. T中右孩子指针为空的结点个数
讲解笔记
所有概念性题目,没有给出具体树的,都用枚举树发(化抽象为具体)的方法来做。
逻辑分析一下:森林中叶子结点是没有孩子的,用左孩子右兄弟方法来转化,转化为二叉树里面就没有左孩子了,所以二叉树中没有左孩子的结点为森林中的叶子结点。
讲解视频链接:【每日一题 | 数据结构 】 树的存储与森林转换算法