树与森林

树的存储结构

1.双亲表示法

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

双亲表示法的存储结构

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

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

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

2.孩子表示法

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

3.孩子兄弟表示法

二叉链表做为树的存储结构,每一个结点包括3部份内容——结点值、指向结点第一个孩子结点的指针和指向下一个兄弟节点的指针。

最大的优点在于能够快速的完成树转化为二叉树的操做,一样,这种结构便于寻找子结点以及兄弟结点,查找双亲结点的时候比较麻烦,若每一个结点在增设一个parent域指向其父节点,则查找父结点也很方便。

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

树转换二叉树的规则:每一个结点左指针指向它的第一个孩子结点,右指针指向它在树中相邻的兄弟结点,可表示为“左孩子,右兄弟”,因为根结点没有兄弟,因此树转换而得的二叉树没有右子树。

树->二叉树

5、树和森林的遍历

1、树的遍历:

  • 1.先根遍历:相对应为树的先序遍历

  • 2.后根遍历:相对应为树的中序遍历

2、森林的遍历

先序遍历森林

  • 1)访问森林中第一棵树的根结点

  • 2)先序遍历第一棵树中的根节点的子树森林

  • 3)先序遍历除第一课子树以后剩余的树构成森林。

中序遍历森林

  • 1)中序遍历森林中第一棵树的根结点的子树森林

  • 2)访问第一棵树的根结点

  • 3)中序遍历除去第一棵树以后剩余的树构成的森林

posted @ 2022-02-11 21:22  PassName  阅读(57)  评论(0)    收藏  举报