树和森林和二叉树

树的存储结构


双亲表示法:

       数组存储,每个结点中存储着其父亲结点在数组中的索引。


孩子表示法:

       1)一个结点中存储着自己的数据域指针和指向其所有孩子的指针

       2)由于1)会导致有大量儿子的结点存储的信息量太大,故改为数组中的一个结点存储着自己的数据域指针和指              向其第一个孩子的指针。然后非数组结点则有一个指针指向下一个兄弟的指针。


孩子兄弟表示法:

       又称二叉树表示法,为什么这么叫,下面会解释。结点中除了数据域指针以外,还存储着指向第一个儿子的指            针,和下一个兄弟的指针。

typedef struct CSNode {
	Elemtype data;
	struct CSNode *firstChild, *nextSibling;

}CSNode, *CSTree;

       我们知道,在二叉树的链式存储中,一个结点除了数据域指针以外,还有leftChild、rightChild两个指针。刚好树的孩子兄弟表示法里面,也有 firstChild 和 nextSibling 两个指针。所以当我们把这两个指针解释为二叉树的那两个指针的时候,这棵树就对应一棵二叉树了。所以啊,树的孩子兄弟表示法又名 “二叉树表示法”。引入[1]中的一个示例:



森林与二叉树对应:

先把,森林中的每棵树都按上面的规则转换成二叉树,然后,很显然地,你会发现--所有转换得到地二叉树的右子树都是空的。根据这个,我们就可以构造一个二叉树--把第二棵二叉树的根结点作为第一棵二叉树的根结点的右儿子,得到一棵二叉树。然后,把第三棵二叉树的根结点接到这棵二叉树中原第二棵二叉树的根结点,作为它的右子树,循环往复,我们就得到了一棵 “森林的二叉树”。


森林的先序遍历和中序遍历,即是其对应二叉树的先序遍历和中序遍历。也可以对各棵树,求出其二叉树,遍历,然后这些二叉树的遍历序列接起来。


树的先根、后根遍历,对应于二叉树的先序、中序遍历。




References:


[1] 数据结构(C语言版)严蔚敏 吴伟民 编著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值