森林与二叉树的转换

作者&投稿:程珠 (若有异议请与网页底部的电邮联系)
森林与二叉树的转换~

将一棵树转换成二叉树的方法:
将一棵树转换成二叉树实际上就是将这棵树用孩子兄弟表示法存储即可,此时,树中的每个结点最多有两个指针:一个指针指向第一个孩子,另一个指针指向右侧第一个兄弟。当你将这两个指针看作是二叉树中的左孩子指针和孩子右指针时,就是一棵二叉树了。
特点:一棵树转换成二叉树后,根结点没有右孩子。
将森林转换成二叉树的方法与一棵树转换成二叉树的方法类似,只是把森林中所有树的根结点看作兄弟关系,并对其中的每棵树依依地进行转换。
二叉树还原成树或森林
这个过程实际上是树、森林转换成二叉树的逆过程,即将该二叉树看作是树或森林的孩子兄弟表示法。比如,若二叉树为空,树也为空;否则,由二叉树的根结点开始,延右指针向下走,直到为空,途经的结点个数是相应森林所含树的棵数;若某个结点的左指针非空,说明这个结点在树中必有孩子,并且从二叉树中该结点左指针所指结点开始,延右指针向下走,直到为空,途经的结点个数就是这个结点的孩子数目。

树、森林与二叉树的转换

1、 树、森林转换成二叉树

将一棵树转换成二叉树的方法:

将一棵树转换成二叉树实际上就是将这棵树用孩子兄弟表示法存储即可,此时,树中的每个结点最多有两个指针:一个指针指向第一个孩子,另一个指针指向右侧第一个兄弟。当你将这两个指针看作是二叉树中的左孩子指针和孩子右指针时,就是一棵二叉树了。

特点:一棵树转换成二叉树后,根结点没有右孩子。

将森林转换成二叉树的方法与一棵树转换成二叉树的方法类似,只是把森林中所有树的根结点看作兄弟关系,并对其中的每棵树依依地进行转换。

2 、二叉树还原成树或森林

这个过程实际上是树、森林转换成二叉树的逆过程,即将该二叉树看作是树或森林的孩子兄弟表示法。比如,若二叉树为空,树也为空;否则,由二叉树的根结点开始,延右指针向下走,直到为空,途经的结点个数是相应森林所含树的棵数;若某个结点的左指针非空,说明这个结点在树中必有孩子,并且从二叉树中该结点左指针所指结点开始,延右指针向下走,直到为空,途经的结点个数就是这个结点的孩子数目。

拉右兄弟方法,如上。方法简单,写起程序实现就烦了!

找本数据结构书,上边有介绍




二叉树如何转化为树林
二叉树转换为树:很简单,将二叉树原节点的左子树不变,右子树变为其兄弟,即左孩子右兄弟 树转换为二叉树:对树中每个节点除保留第一个节点的连线外,断开其他孩子的连线,然后将其原兄弟连线,原树中第一个孩子为左子树,其余兄弟均为其左兄弟的右子树,呵呵,好好理解下,多看看书^ 加油~一个树林对应多个...

森林T=(T1,T2,…,Tm)转化为二叉树BT的过程为若m=0,则BT为空,则...
【答案】:B 将森林中每棵树的根结点看成是兄弟结点的关系,再按照“左孩子右兄弟”的规则来进行转化。

二叉树如何转变成树林
1、将同一结点的各孩子结点用线串起来 2、将每个结点的分支从左往右除了第一个以外,其余的都剪掉

如何将二叉树转换为森林啊
将一棵二叉树转化成森林,可按如下步骤进行:①抹线:将二叉树根结点与其右孩子之间的连线,以及沿着此右孩子的右链连续不继搜索到的右孩子间的连线抹掉。这样就得到了若干棵根结点没有右子树的二叉树。②将得到的这些二叉树用前述方法分别转化成一般树。

森林转换成二叉树
第一,断开除最左孩子的孩子节点,第二,连接孩子节点中各兄弟节点,第三,将树顺时针旋转45度 第四,同理处理其他树。第五,将所有树按照先后顺序依次作为右子树连接。搞定

设F是一个森林,B是由F变换来的二叉树。若F中有n个非终端结点,则B中右...
【答案】:C 根据森林与二叉树转换规则“左孩子右兄弟”。二叉树B中右指针域为空代表该结点没有兄弟结点。森林中每棵树的根结点从第二个开始依次连接在前一棵树根的右孩子上,则最后一棵树根结点的右指针为空。每一个非终端结点,它的所有孩子结点在转换之后,最后一个孩子的右指针也为空,故树B...

已知下图所示的二叉树是由某森林转换而来,请画出其原来的森林?
这个森林中一共有四棵树

树与森林在转化成二叉树时,左右子树的数目有何特点
树转换为二叉树,右子树为空,左子树结点个数为原树结点个数-1 森林转换为二叉树,根加左子树是第一棵树,往右子树一直往右走的结点个数是其他各棵树的根,整个右子树结点个数就是除了第1棵树以外所有树结点个数之和

将树,森林转换成二叉树的基本目的是什么?
可以将树、二叉树和森林统一存储,统一处理,尤其是三者的遍历操作可以相互等价

从概念上讲,树、森林和二叉树是三种不同的数据结构,将树、森林转化为...
1、方便编程中的调用 2、二叉树中每个结点最多有两个子树,普通的树没有限制 本回答由提问者推荐 举报| 答案纠错 | 评论 5 1 wind_lihao 采纳率:43% 擅长: 电脑\/网络 理工学科 游戏 动漫 足球 为您推荐: 二叉树有什么用 二叉树的遍历算法图解 森林和二叉树 完全二叉树 与二叉树等价的森林 平衡...

安溪县19154584758: 森林与二叉树的转换 -
生骆迪赛: 1、 树、森林转换成二叉树 将一棵树转换成二叉树的方法: 将一棵树转换成二叉树实际上就是将这棵树用孩子兄弟表示法存储即可,此时,树中的每个结点最多有两个指针:一个指针指向第一个孩子,另一个指针指向右侧第一个兄弟.当你将...

安溪县19154584758: 怎么将一个森林转化为二叉树 谁能给我一个例子 -
生骆迪赛:[答案] 将森林中每棵树的根节点作为二叉树的根节点,每个节点中的从左数第一个孩子是二叉树中的左孩子,该孩子的所有兄弟都依次为该节点的有孩子 ,如此例推.

安溪县19154584758: 森林转换成二叉树 -
生骆迪赛: 第一,断开除最左孩子的孩子节点, 第二,连接孩子节点中各兄弟节点, 第三,将树顺时针旋转45度 第四,同理处理其他树. 第五,将所有树按照先后顺序依次作为右子树连接. 搞定

安溪县19154584758: 在C++中如何将森林转换为二叉树呢?
生骆迪赛: 以下是步骤: 1、转换:将森林中的每棵树转换成二叉树; 2、连线:第一颗树不动,从第二棵树开始,依次把后一棵树的根节点座位前一棵树的根节点的右孩子,知道所有的二叉树都连在一起,即完成了森林向二叉树的转换. 3、旋转:以根节点为轴心,将整棵树顺时针旋转一定角度,得到层次分明的二叉树.首先你要对一些基本概念掌握清楚.祝你好运!!

安溪县19154584758: 森林和二叉树转换的c或c++代码 -
生骆迪赛: 你好,尊敬的用户楼主,很愿意为你问题作答1、转换:将森林中的每棵树转换成二叉树; 2、连线:第一颗树不动,从第二棵树开始,依次把后一棵树的根节点座位前一棵树的根节点的右孩子,知道所有的二叉树都连在一起,即完成了森林向二叉树的转换. 3、旋转:以根节点为轴心,将整棵树顺时针旋转一定角度,得到层次分明的二叉树.将一棵二叉树转化成森林,可按如下步骤进行: ①抹线:将二叉树根结点与其右孩子之间的连线,以及沿着此右孩子的右链连续不继搜索到的右孩子间的连线抹掉.这样就得到了若干棵根结点没有右子树的二叉树.②将得到的这些二叉树用前述方法分别转化成一般树. 首先你要对一些基本概念掌握清楚.祝你好运!!

安溪县19154584758: 树和二叉树有唯一的相互转换方法么?森林和二叉树呢、
生骆迪赛: 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3,因此,森林也可以方便地用孩子兄弟链表表示.森林转换为二叉树的方法如下:

安溪县19154584758: 二叉树与树(或森林)之间能不能转化?为什么 -
生骆迪赛: 可以转换啊,使用左孩子右兄弟,将一棵棵的树先转换为二叉树后,再从第二棵树开始,依次将根连接在前一棵树根的右子树上就可以了

安溪县19154584758: 森林与二叉树的转换
生骆迪赛: 是不是 n+1 啊

安溪县19154584758: 用c语言来完成”森林到二叉树“的转换... -
生骆迪赛: 这是C++的typedef struct BinaryTreeNode{ struct BinaryTreeNode* leftChild; struct BinaryTreeNode* rightChild; int value; }; typedef struct TreeNode{ struct TreeNode* child[]; int child_count; int value; }; BinaryTreeNode* ToBinaryTree(TreeNode* root)...

安溪县19154584758: 请问数据结构二叉树转化为森林则森林是唯一的吗?即使问只能转化为一
生骆迪赛: 是的,任何一个二叉树都对应一个唯一的森林

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网