1) 編寫演算法函數int equal(tree t1, tree t2),判斷兩棵給定的樹是否等價; 2) 編寫演算法函數void preorder(bintree t)實現二叉樹t的非遞歸前序遍歷; 3)編寫演算法函數degree(LinkedGraph g)輸出以鄰接表為存儲結構的無向圖的各頂點的度 ...
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 }