树【二叉树】与森林的相互转化与遍历

一、树与森林的相互转换

预备知识:孩子兄弟表示法。

代码编写出来:

typedef struct CSNode{
	int data;
	struct CSNode *firstchild,*nextS;
}CSNode;

 解释:该结点的链域分别指向它的第一个孩子和它同级的兄弟。

(一)森林转换成树

step1:将森林里面的树转化为二叉树。(用孩子兄弟表示法)

如图:

 step2:把这片转化后的森林再用一次孩子兄弟表示法表示成一颗大的二叉树。【这颗最终的二叉树是以A作为根结点的】

如图: 

 (二)二叉树转换成森林

因为之前的森林我们已经知道是用孩子兄弟表示法做出来的,所以每个结点的右链指向的都是同一级的兄弟。

step1:

断掉这个二叉树的右链,它根结点所在的那一脉是森林中的树。【注意:因为A是这颗二叉树的根结点,所以A的右链都是与它同级森林的根结点】

如图:

 step2:把断掉的右节点连到它兄弟的双亲上,(这也是它的双亲)

如图:

二、遍历

树,二叉树,森林各种遍历总结:

树的前序遍历,对应二叉树的前序遍历。
树的后序遍历,对应二叉树的中序遍历。
树的层次遍历,对应二叉树的后序遍历。

森林的前序遍历,对应二叉树的前序遍历。
森林的中序遍历,对应二叉树的中序遍历。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值