树、森林与二叉树的转化:
树与二叉树均可用二叉链表作为存储结构。则以二叉链表为媒介可导出树与二叉树之间的一个对应关系——即给定一棵树,可以找到唯一一棵二叉树与之对应。
一、树——二叉树
1、加线:在各亲兄弟之间加一虚线。
2、抹线:抹掉(除第一个孩子外)该结点到其余孩子之间的连线。
3、旋转:新加上去的虚线改实线且均向右斜(rchild),原有的连线均向左斜(lchild),使之结构层次分明。
二、森林——二叉树
1、将各棵树分别转换为二叉树。
2、按给出森林中树的次序,依次将后一 棵二叉树作为前一棵二叉树根结点的右子树,则第一棵树的根结点是转换后二叉树的根。
三、二叉树——树:前提:二叉树的根结点无右孩子
1、加线:若某结点i是双亲结点的左孩子,则将该结点的右孩子以及当且仅当连续地沿着此右孩子的右链不断搜索到的所有右孩子都分别与结点i的双亲用虚线连起来。
2、抹线:抹掉原二叉树中所有双亲结点 与右孩子的连线。
3、归整化:将图形归整化,使各结点按层次排列且将加上去的虚线变成实线。
四、二叉树——森林:前提:二叉树的根结点必有右孩子
1、抹线:将二叉树的根结点与其右孩子 i 的连线以及当且仅当连续地沿着 i 的右链不断搜索到的所有右孩子间的连线全部抹掉,这样得到若干 棵孤立的二叉树。
2、还原:将各棵孤立的二叉树按二叉树 还原为一般树的方法还原为树。
树和森林的遍历:
树的遍历:一、先根遍历 二、后根遍历
森林的遍历:一、先根遍历 二、后根遍历
(1) 先根遍历
若森林F为空, 返回;
否则:
访问F的第一棵树的根结点;
先根次序遍历第一棵树的子树森林;
先根次序遍历其它树组成的森林。
(2) 中根遍历(实际就是后根遍历每棵树)
若森林F为空,返回;
否则:
中根次序遍历第一棵树的子树森林;
访问F的第一棵树的根结点;
中根次序序遍历其它树组成的森林。