C语言数据结构之树与森林详细解析

1.树的存储结构

1.双亲表示法

1.双亲表示法即采用一组连续的空间表示,其中根结点的双亲用-1表示。

双亲表示法
2.双亲表示法的存储结构

#define MAX_TREE_SIZE 50			//树中最多的结点数
typedef struct{
	ElemType data;			//数据元素
	int parent;					//双亲位置
}PTNode;

typedef struct{
	PTNode nodes[MAX_TREE_SIZE];
	int n;									//结点数
}PTree;

这种存储结构可以快速找到双亲的结点,但是在求结点的孩子时,需要遍历整个树形结构。

2.孩子表示法

孩子表示法这种存储方式找子结点比较容易,但是找父节点,则需要遍历N个结点中孩子链表指针域所指向的N个孩子链表。

3.孩子兄弟表示法

以二叉链表作为树的存储结构,每个结点包括3部分内容——结点值、指向结点第一个孩子结点的指针和指向下一个兄弟节点的指针。
孩子兄弟表示法这种存储方式很灵活,最大的优势在于可以快速的完成树转化为二叉树的操作,同样,这种结构便于寻找子结点以及兄弟结点,查找双亲结点的时候比较麻烦,若每个结点在增设一个parent域指向其父节点,则查找父结点也很方便。

4.树、森林、二叉树的转换

树转换二叉树的规则:每个结点左指针指向它的第一个孩子结点,右指针指向它在树中相邻的兄弟结点,可表示为“左孩子,右兄弟”,由于根结点没有兄弟,所以树转换而得的二叉树没有右子树。
树->二叉树(之前有问题,现已修正)
在这里插入图片描述

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

二、树和森林的遍历

一、树的遍历:
1.先根遍历:相对应为树的先序遍历
2.后根遍历:相对应为树的中序遍历
二、森林的遍历
1.先序遍历森林
1)访问森林中第一棵树的根结点
2)先序遍历第一棵树中的根节点的子树森林
3)先序遍历除第一课子树之后剩余的树构成森林。
2.中序遍历森林
1)中序遍历森林中第一棵树的根结点的子树森林
2)访问第一棵树的根结点
3)中序遍历除去第一棵树之后剩余的树构成的森林

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值