浅谈数据结构-树和二叉树之间关系
树都可用二叉链表作为存储结构,对比各自的结点结构可以看出,以二叉链表作为媒介可以导出树和二叉树之间的一个对应关系。
◆ 从物理结构来看,树和二叉树的二叉链表是相同的,只是对指针的逻辑解释不同而已。
◆ 从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树一定为空。
1 树转换成二叉树
对于一般的树,可以方便地转换成一棵唯一的二叉树与之对应。将树转换成二叉树在“孩子兄弟表示法”中已给出,其详细步骤是:
⑴ 加虚线。在所有兄弟结点之间加线。
⑵ 去连线。只保留大孩子(除最左的第一个子结点),删除它与其他孩子结点之间连线。
⑶ 层析调整:以树根节点为轴心,将树顺时针旋转一定角度,原有的实线左斜(左孩子是左子树),虚线右斜(虚线连接的兄弟结点为右子树。
2 二叉树转换成树
对于一棵转换后的二叉树,如何还原成原来的树? 其步骤是:
⑴ 加虚线。若某结点i是其父结点的左子树的根结点,则将该结点i的右子结点以及沿右子链不断地搜索所有的右子结点,将所有这些右子结点与i结点的父结点之间加虚线相连,如下图a所示。
⑵ 去连线。去掉二叉树中所有父结点与其右子结点之间的连线,如下图b所示。
⑶ 规整化。将图中各结点按层次排列且将所有的虚线变成实线,如下图c所示。
3 森林转换成二叉树
1、把每颗子树转化为二叉树。
2、第一课二叉树不懂,从第二课二叉树开始,依次把后一棵二叉树根节点作为前一棵二叉树的根节点右孩子,用线连接起来。
4 二叉树转换成森林
① 去连线。将二叉树B的根结点与其右子结点以及沿右子结点链方向的所有右子结点的连线全部去掉,得到若干棵孤立的二叉树,每一棵就是原来森林F中的树依次对应的二叉树,如图(b)所示。
② 二叉树的还原。将各棵孤立的二叉树按二叉树还原为树的方法还原成一般的树,如图(c)所示。