树、森林与二叉树的转换

来源:互联网 发布:java应用 编辑:程序博客网 时间:2024/06/13 04:11

由于二叉树和树都可以用二叉链表作为存储结构,则以二叉链表作为媒介可以导出树与二叉树的一个对应关系,即给定一棵树,可以找到唯一的一颗二叉树与之对应。从物理结构上看,树的孩子兄弟表示法语二叉树的二叉链表表示法相同,即每个结点共有两个指针,分别指向结点第一个孩子和结点的下一兄弟结点,而二叉链表使用双指针。因此,就可以用同一存储结构的不同解释将一棵树转换为二叉树。


树转换成二叉树
每个结点左指针指向它的第一个孩子结点,右指针指向它在树中的相邻兄弟结点,可表示为“左孩子右兄弟”。由于根结点没有兄弟,所以,由树转换而得的二叉树没有右子树。

这里写图片描述


森林转换成二叉树
将森林转换成二叉树的规则与树类似。先将森林中的每一棵树转换成二叉树,再将第一棵树的根作为转换后的二叉树的根,第一棵树的左子树作为转换后二叉树根的左子树,第二棵树作为转换后二叉树根的右子树,第三棵树作为转换后二叉树根的右子树的右子树,以此类推。


二叉树转换成森林
若二叉树非空,则二叉树根及其左子树为第一棵树的二叉树形式,二叉树根的右子树可以看作是一个由除第一棵树外的森林转换后的二叉树,应用同样的方法,直到最后产生一颗没有右子树的二叉树为止,这样就得到了原森林。


树转换成二叉树的画法
1.在兄弟结点之前加一连线
2.对每一个结点,只保留它与第一个子结点的连线,与其他子结点的连线全部抹掉
3.以树根为轴心,顺时针旋转45


森林转换成二叉树的画法
1.将每棵树的根相连
2.将森林中的每棵树转换成相应的二叉树
3.以第一棵树的根为轴心顺时针旋转45


更多查看我的博客:https://beatjerome.github.io

原创粉丝点击