5.4.1树的存储结构
可采用顺序存储结构or链式存储结构
要求能唯一的反映树中各节点之间的逻辑
1.双亲表示法
采用一端连续的空间来存储,同时在每个节点中增设一个伪指针,指示双亲节点在数组中的下标
优点:找双亲节点方便,找孩子不方便
attention:由于根节点无双亲节点,所以其双亲节点的坐标为-1;
双亲表示法的存储结构代码如下:
#include<stdio.h>;
#define maxsize 100
typedef struct {
int data;//存储数据
int parent;//双亲位置域
}PTnode;
typedef struct {
PTnode nodes[maxsize];//双亲表示
int n;//节点数
}PTree;
2.孩子表示法
将每个节点的孩子节点视为一个线性表
优点:找孩子方便,找双亲节点不方便
3.孩子兄弟表示法
孩子兄弟表示法又称二叉树表示法,以二叉链表作为树的存储结构
孩子兄弟表示法存储代码如下:
#include<stdio.h>;
typedef struct CSnode
{
int data;//定义数据
CSnode* firstnode, * nextsibling;//第一个孩子和右兄弟指针
}CSnode;
5.4.2树,森林与二叉树的转换
1.树转化为二叉树
2.森林转换为二叉树
3.二叉树转化为森林
5.4.3树和森林的遍历
1.树的遍历
先跟遍历与其对应的二叉树先序序列相同
后跟遍历与其对应二叉树的中序序列相同
2.森林的遍历
先序遍历森林与其对应的二叉树先序序列相同
后序遍历森林与其对应二叉树的中序序列相同