知识框架:
1.存储结构
先明白其满足的定义
1.1 双亲表示法
定义:以一组连续空间储存树的结点,同时在每个结点中附设一个指示器指示其父结点在数组中的位置,这是运用了每个结点只有一个父结点的逻辑。
优缺点分析:
复习策略:直接看这个图对应表,自己能不能画出来,可以画出来,这个过程就明白了,不清楚,直接听课。
2.孩子表示法
注:复习策略与上面一样。(这个是我认为最高效方式)
3.孩子兄弟法
代码实现:
考题:主要考高频是树与二叉树的转化
- 树转换为二叉树:树的二叉链表是储存左孩子右兄弟,二叉树是左右孩子,所以只需让每一个结点的第一个右兄弟都变成它的右孩子。
- 二叉树转换为树:所以只需让每一个结点的右孩子都恢复成它的右兄弟。
2.问题解答
问题①:对于一个有n个结点的树,其中叶结点为m,则转换为二叉树后其中无右孩子结点的个数为?
答案:树中的每个分支结点的最右侧孩子结点是无右兄弟的,故问题转化为二叉树后是无右孩子的。在树中,每一个分支结点都必定有且仅有一个孩子结点是没有右兄弟的,分支结点共n-m个,但是根结点作为它的父节点(←实际不存在)的孩子结点也是没有右兄弟的,故答案要再加一,共n-m+1
问题②:森林转换为二叉树,问森林中叶结点的个数等于二叉树中的什么?
答案:森林中的叶结点是没有孩子结点的,转换为二叉树后同样没有左孩子结点。而森林中的非叶结点都是有孩子结点的,转化后一定也还有左孩子结点。这是问题的关键,故答案为二叉树中左孩子指针为空的结点个数。
3.树和森林的遍历
定义:
- 树的遍历:
先根遍历树:若树非空,先访问树的根结点,再依次从左至右先根遍历根的每棵子树。
后根遍历树:若树非空,先依次从左至右后根遍历每棵子树,再访问树的根结点。
没有中根遍历是因为树中每个结点的度不一样,没有左根右这样的方式了。只能分为先访问根或者后访问根这两种方式,此外树也有层次遍历,即按层序依次访问各结点。
- 森林的遍历
先序遍历森林:先根遍历第一棵树,然后依次遍历剩下的树。
中根(后根)遍历森林:后根遍历第一棵树,然后依次遍历剩下的树。
注:部分教材将森林的中根遍历称为后根遍历,称中根遍历是相对其二叉树而言的,称后根遍历是因为根确实是最后访问的。
树、二叉树、森林遍历的对应关系:
注:同一行相同。
对于树和森林的遍历,根据此表转换为熟知的二叉树遍历处理。