从零开始的数据结构学习日记(十四)——1.14树和森林

1.1树的存储结构

1.双亲表示法
树的每个结点都有唯一的双亲,基于这一性质,可以用连续的一组空间存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在链表中的位置。双亲表示法可以方便地查找结点的双亲和祖先,但是查找孩子结点或者子孙时需要遍历整个树结构。

#define maxsize 100
typedef struct
{
	datatype data;
	int parent;
}PTNode;
typedef struct
{
	PTNode nodes[maxsize];
	int n;//结点数
}PTree;

2.孩子双亲表示法
孩子表示法是指用一个与树结点个数同样大小的一维数组,并且数组的每一个元素由两个域组成,一个域存放结点信息,另一个域是一个指针,用来指向该结点所有孩子结点组成的单链表中的第一个孩子结点。

typedef struct CTNode
{
	int child;
	struct CTNode *next;
}*ChildPtr;
typedef strcut
{
	datatype data;
	ChildPtr child;//孩子链表表头指针
	int parent;
}CTBox;
typedef struct
{
	CTBox nodes[maxsize];
	int n;//结点数
}CTree;

1.2树、森林与二叉树的转换

1.树、森林转换成二叉树
1)在兄弟之间加连线;
2)保留结点与第一个孩子之间的连线,去掉其余的连线;
3)以根结点为轴心,将树顺时针旋转一定的角度,使之层次分明。
由于树的根结点没有兄弟结点,故转换之后的二叉树其右子树必为空。

2.森林转换成二叉树
1)把每一棵树依次转换为二叉树。
2)第一颗二叉树不动,从第二颗二叉树开始,依次把后一颗二叉树的根结点作为前一颗二叉树的根结点的右孩子,用线连接起来。
3)以第一棵树的根为轴心,顺时针旋转一定的角度。
3.二叉树转换为森林
假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树。
1)从根节点开始,若右孩子存在,则把与右孩子结点的连线删除重复这一过程,直到所有这些根节点与右孩子的连线都删除为止。
2)将每棵分离后的二叉树转换为树,使之层次分明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值