【概述】
从树的孩子兄弟表示法和二叉树的二叉链表表示可以看出,树的孩子兄弟表示法实质上是二叉树的二叉链表存储形式,第一个孩子指针和右兄弟指针分别相当于二叉链表的左孩子指针和右孩子指针。
因此,从物理结构上看,树的孩子兄弟表示法和二叉树的二叉链表是相同的,只是解释不同。
以二叉链表为媒介,可导出树与二叉树的对应关系,即给出一棵树,可以找到唯一的一棵二叉树与之对应,这样树的操作实现就可借助二叉树存储,利用二叉树上的操作来实现。
【树转二叉树】
将一棵树转为二叉树的方法是:
- 加线:树中所有相邻兄弟结点间加一条线
- 去线:对树中的每个结点,只保留他与第一个子结点的连线,删除与其他子结点的连线
- 层次调整:以根结点为轴心,将树顺时针旋转一定角度,使之层次分明
根据树与二叉树的转换关系以及二叉树的遍历操作可知:
- 树的前序遍历 <----> 二叉树的前序遍历
- 树的后序遍历 <----> 二叉树的中序遍历
【森林转二叉树】
森林是若干棵树的集合,将森林中的每棵树转为二叉树,再将每棵树的根节点视为兄弟,这样森林就转成了二叉树。
将一棵树转为二叉树的方法是:
- 转树:将森林中的每棵树转换成二叉树
- 连接:从第二棵树二叉树开始,依次将后一棵二叉树的根节点作为前一棵二叉树根结点的右孩子
【二叉树转树或森林】
树和森林都能转成二叉树,二者的不同是树转成的二叉树其根结点无右子树,森林转成的二叉树其根结点有右子树。
显然,这一转换过程是可逆的,即根据二叉树的根结点有无右子树,将其还原成树或森林。
将一棵二叉树转成树或森林的方法是:
- 加线:若某结点 x 是其双亲 y 的左孩子,则把结点 x 的右孩子、右孩子的右孩子、……,都与结点 y 用线连起来
- 去线:删去原二叉树中所有的双亲结点与右孩子结点的连线
- 层次调整:整理 1、2 步得到的树或森林,使之层次分明
【森林的遍历】
森林有两种遍历方法:
- 前序遍历:前序遍历森林中的每一棵树
- 后序遍历:后序遍历森林中的每一棵树