树,森林与二叉树的相互转化,树的遍历
一. 森林与二叉树可相互转化的原因
- 由于二叉树和树都可以用二叉链表作为存储结构,则以二叉链表作为媒介可导出树与二叉树之间的一个对应关系
- 也就是说,给定一棵树,可以找到唯一的一棵二叉树与之对应,从物理结构来看,它们的二叉链表是相同的,只是解释不同而已。
二. 树转化为二叉树
以树的根结点为轴心,将整棵树顺时针转动45度,使之结构层次分明。
三. 森林转化为二叉树
当要转化为二叉树的森林由两棵或以上树构成时,将这样的森林转换为二叉树的过程如下:
- 将森林中的每棵树转换为相应的二叉树。
- 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子结点,当所有二叉树连在一起后,此时所得到的二叉树就是由森林转换得到的二叉树。
四. 二叉树还原为树
还原过程:
- 若某结点是其双亲的左孩子,则把该结点的右孩子,右孩子的右孩子,…,都与该结点的双亲结点用连线连接起来。
- 删除原二叉树中所有双亲结点与右孩子结点之间的连线。
- 整理由上述两步所得到的树,使之结构层次分明。
当根结点的右子树为空时,是由树转化而来,反之是由森林转化而来。
五. 二叉树还原为森林
当一棵二叉树是由m棵树构成的森林转换而来的,该二叉树的根结点一定有m-1个右下孩子,则该二叉树还原为森林的过程如下:
- 抹掉二叉树根结点右链上所有结点之间的“双亲—右孩子”关系,将其分为若干个以右链上的结点为根结点的二叉树,设这些二叉树为bt1,bt2,…bt m。
2.分别将 bt1,bt2,…bt m二叉树各自还原为一棵树。
六. 树的遍历
有两种遍历方法:
先根遍历和后根遍历。
先根遍历
若树不空,则先访问根结点,然后依次先根遍历各棵子树。
后根遍历
若树不空,则先依次先根遍历各棵子树,然后访问根结点。