3.1 树的存储结构
//双亲表示法(顺序存储) #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define MAXN 100 //最大结点数 //树结点的定义 typedef struct{ char data; //数据域 int parent; //双亲的下标 } PTNode; //双亲法的树类型定义 typedef struct{ PTNode nodes[MAXN]; //树结点的数组 int n; //结点数 } PTree; int main(){ PTree T; T.n=4; T.nodes[0].data='A'; T.nodes[1].data='B'; T.nodes[2].data='C'; T.nodes[3].data='D'; T.nodes[0].parent=-1; T.nodes[1].parent=0; T.nodes[2].parent=0; T.nodes[3].parent=0; for(int i=0;i<T.n;i++) printf("%d ",T.nodes[i].parent); return 0; }
//孩子表示法(顺序+链式存储) #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define MAXV 100 //最大结点数 //链结点的定义 typedef struct LNode{ int child; //孩子的下标 struct LNode *next; //下一个孩子 } LNode; //树结点的定义 typedef struct{ char data; //数据域 LNode *firstChild; //第一个孩子 } CTNode; //孩子法的树类型定义 typedef struct{ CTNode nodes[MAXV]; //树结点的数组 int n,r; //结点数,根的下标 } CTree; int main(){ CTree T; T.n=4; T.r=0; T.nodes[0].data='A'; T.nodes[1].data='B'; T.nodes[2].data='C'; T.nodes[3].data='D'; LNode *p=(LNode*)malloc(sizeof(LNode)); p->child=1; T.nodes[0].firstChild=p; p=(LNode*)malloc(sizeof(LNode)); p->child=2; T.nodes[0].firstChild->next=p; p=(LNode*)malloc(sizeof(LNode)); p->child=3; T.nodes[0].firstChild->next->next=p; for(LNode *p=T.nodes[0].firstChild; p; p=p->next) printf("%c ",T.nodes[p->child].data); //输出A的孩子 return 0; }
//孩子兄弟表示法(链式存储) typedef struct CSNode{ //树结点的定义 char data; //数据域 struct CSNode *firstchild; //第一个孩子 struct CSNode *nextsibling; //右兄弟指针 }CSNode,*CSTree;
.
浙公网安备 33010602011771号