1. 树转化为二叉树
树转化为二叉树的我们通常使用 CHILD-SIBLING(leftmost-child-next-right-sibling)法则,即左孩子右兄弟,它的执行步骤如下:
1:将树中节点的所有兄弟节点用横线连接起来。
2:删除所有与子节点的链接,只保留与最左边子节点的链接。
3:顺时针旋转45度。
步骤一:将各个兄弟节点连接起来
步骤二:删除所有子节点之间的链接,只保留最左边父子节点的链接
步骤三:旋转使二叉树成型
树的存储结构
以下是三种常用的表示方式:
1.双亲表示法
这种表示方法中,以一组连续的存储单元存储树的节点,每个节点除了数据域data外。还附设一个parent域用以指示其双亲节点的位置,其节点形式如图5.18所示。
优点:求双亲与根十分简便。
缺点:求孩子节点比较繁琐。
2.孩子表示法
把每个孩子结点排列起来,以单链表作存储结构,则n个结点有n个孩子链表,,然后把n个单链表的头指针组成一个线性表(顺序结构存储,放在一个数组中)。
以上两种表达方法均存在致命缺点,于是就有了第三种方法:孩子兄弟表示法。
此方法是以上两种方法的结合。
3.孩子兄弟表示法
使用链式存储结构存储普通树。链表中每个结点由 3 部分组成:
一个数据域和两个指针域,如下图所示:
这种存储结构的优点是,他和二叉树的二叉链表表示完全一样,便于将一般的树结构转换为二叉树进行处理,利用二叉树的算法来实现对树的操作。
森林与二叉树的转换
由树的二叉链表表示的定义可知,任何一颗树与对应的二叉树的根节点的右子树必定为空。
如果把森林中的第二棵树的根节点看作第一棵树的根节点的兄弟。则同样可以导出森林与二叉树的关系。
当所有的二叉树连接起来后得到的二叉树就是由森林转换得到的二叉树。
将森林转换为二叉树的步骤是:
(1)先把每棵树转换为二叉树;
(2)第一棵二叉树不动,然后从第二棵二叉树开始,依次把后面一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子结点,用线连接起来。最后整理就成功把森林整合为一颗二叉树了。
二叉树转换成为森林其实就是森林转换为二叉树的逆过程。
二叉树转换为森林其步骤如下:
(1)先把每个结点与右孩子结点的连线删除,得到分离的二叉树;
(2)把分离后的每棵二叉树转换为树;
(3)整理第(2)步得到的树,这样就得到了森林。