1) 编写算法函数int equal(tree t1, tree t2),判断两棵给定的树是否等价;
1 int equal(tree t1,tree t2) 2 { 3 int k; 4 if(t1==NULL&&t2==NULL) 5 return TRUE; 6 else if(t1!=NULL&&t2==NULL||t1==NULL&&t2!=NULL) 7 { 8 return FALSE; 9 } 10 else if(t1->data!=t2->data) 11 { 12 return FALSE; 13 } 14 for(k=0;k<m;k++) 15 { 16 equal(t1->child[k],t2->child[k]); 17 if(equal(t1->child[k],t2->child[k])==FALSE) 18 { 19 return FALSE; 20 } 21 else 22 return TRUE; 23 } 24 }
2) 编写算法函数void preorder(bintree t)实现二叉树t的非递归前序遍历;
1 void preorder1(bintree t) 2 { 3 seqstack s; 4 init(&s); 5 while(t||!empty(&s)) 6 { 7 if(t) 8 { 9 printf("%c",t->data); 10 push(&s,t); 11 t=t->lchild; 12 } 13 else if(!empty(&s)) 14 { 15 t=pop(&s); 16 t=t->rchild; 17 } 18 }
3)编写算法函数degree(LinkedGraph g)输出以邻接表为存储结构的无向图的各顶点的度。
1 void degree(LinkedGraph g) 2 { 3 int k; 4 int n; 5 EdgeNode *p; 6 for(k=0;k<g.n;k++) 7 { 8 p=g.adjlist[k].FirstEdge; 9 n=0; 10 while(p!=NULL) 11 { 12 n++; 13 p=p->next; 14 } 15 if(k==0) 16 { 17 printf("%d\n",n); 18 } 19 else 20 { 21 printf("%d\n",n); 22 } 23 } 24 }