//非递归求深度 int NoBiTreeDeep(BiTree T) { LinkQueue q; InitQueue(&q); BiTree tmp=T; if(tmp==NULL) exit(ERROR); EnQueue(&q,tmp); while(QisEmpty(q)!=true) { DeQueue(&q,&tmp); // printf("%c",tmp->data); if(tmp->lchild!=NULL) { EnQueue(&q,tmp->lchild); } if(tmp->rchild!=NULL) { EnQueue(&q,tmp->rchild); } } int deep=0; BiTree m=tmp; BiTree n=T; while(m!=n) { EnQueue(&q,n); while(QisEmpty(q)!=true) { DeQueue(&q,&tmp); if(m==tmp->lchild||m==tmp->rchild) { deep++; m=tmp; break; } if(tmp->lchild!=NULL) { EnQueue(&q,tmp->lchild); } if(tmp->rchild!=NULL) { EnQueue(&q,tmp->rchild); } } } printf("Deep=%d\n",deep+1); }
void BFS(int v) { for (int m = 0; m < n; m++) { visited[m] = 0; } int counter = 0; visited[v] = 1; queueInit(); Queuepush(v);//큐에 v를 넣어준다 fprintf(fout,"%d -> ", v); counter++; while (!QisEmpty()) { v = getFront();//front를 v에 넣는다 Queuepop(); for (int w = 0; w < n; w++) { if ((visited[w]==0) && adj_mat[v][w])//너비 탐색을 위해서 w가 다음 값을 계속 탐색해서 edge가 있으면 탐색시작한다 { Queuepush(w);//w를 push한다. visited[w] = 1;//방문한것으로 표시 fprintf(fout,"%d ", w );//출력 counter++; if (counter<n) fprintf(fout," -> "); } } } }
//二叉树广度遍历--即层次遍历 //使用队列来实现 int TraverseBiTree(BiTree T) { LinkQueue Q; InitQueue(&Q); BiTree tmp=T; if(tmp==NULL) { exit(ERROR); } EnQueue(&Q,tmp); while(QisEmpty(Q)!=true) { DeQueue(&Q,&tmp); printf("%c",tmp->data); if(tmp->lchild!=NULL) { EnQueue(&Q,tmp->lchild); } if(tmp->rchild!=NULL) { EnQueue(&Q,tmp->rchild); } } return true; }