//非递归求深度
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;
}