树的存储结构
1.双亲表示法
//结点结构
typedef struct PTNode{
TElemType data;
int parent; //双亲位置域
}PTNode
//树结构
#define MAX_TREE_SIZE 100
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int r,n; //根结点的位置和结点个数
}PTree;
2.孩子链表(找孩子容易,找双亲难)
//孩子结点结构
typedef struct CTNode{
int child;
struct CTNode *next;
}*ChildPtr;
//双亲节点结构
typedef struct{
TElemType data;
ChildPtr firstchild; //孩子链表头指针
}CTBox;
//树结构
typedef struct{
CTBox nodes[MAX_TREE_SIZE];
int n,r; //结点数和根节点位置
}CTree
3.孩子兄弟表示法(二叉树表示法,二叉链表表示法)
用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点
typedef struct CSNode{
ElemType data;
struct CSNode *fistchild,*nextsibling;\
}CSNode,*CSTree;
树的遍历(三种方式)
先根遍历、后根遍历、层次遍历
森林的遍历
先序遍历、中序遍历