4.10树和森林
4.10.1树的存储
1.双亲表示法
节点形式:
- 数据域:存放结点本身信息。
- 双亲域:指示本结点的双亲结点在数组中的位置。
2.孩子表示法,双亲孩子表示法
3.孩子兄弟表示法
节点形式:
具体形式:
4.11树,森林,二叉树的转换
4.11.1树转二叉树
步骤:
- 所有的相邻兄弟结点间加一条连线;
- 保留每个节点与第一个孩子间的连线,删去其他线;
- 将所生成的二叉树顺时针旋转45°;
- 转换后的根节点的右孩子必为空。
4.11.2森林转二叉树
步骤:
- 把森林中的树全部转换成二叉树;
- 第一颗树不动,下一棵变成上一棵的右孩子;
4.11.3二叉树转成树和森林
1.二叉树转树:
步骤:
- B是A的左孩子,把B的右孩子,右孩子的右孩子与A连接;
- 删去所有双亲结点与右孩子间的连线。
2.二叉树转成森林
步骤:
- 将二叉树中根结点与其右孩子连线,及沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成孤立的二叉树。
- 还原:将孤立的二叉树还原成树。
4.12树的遍历
树的遍历(三种方式)
- 先根(次序)遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树。
- 后根(次序)遍历: 若树不空,则先依次后根遍历各棵子树,然后访问根结点。
- 按层次遍历:若树不空,则自上而下自左至右访问树中每个结点。
先序遍历树的结果=先序遍历二叉树的结果;
后序树=中序二叉树结果;
遍历结果:
先根遍历: ABCD E
后根遍历:BDCEA
按层次遍历: ABCE D
4.13森林的遍历
先序遍历:
- 访问森林中第一棵树的根节点。
- 先序遍历第一棵树中根节点的壳子数组成的森林
- 先去便利第1棵树以外,其他树组成的森林。
先序森林等于先序二叉树。
中序遍历
- 中序便利第1棵树根节点的各子数。
- 访问第1棵树的根节点。
- 中序其他的数。
中序森林等于中序二叉树。
总结技巧:可将森林先转换成二叉树,在找对应的先序和中序遍历序列。