광도 우선 두 갈래 나무 주유

주요 사상: 뿌리 결점부터 각 결점을 하나하나 방문한다.주유가 시작될 때 먼저 뿌리 결점을 대열에 넣는다.그리고 매번 대열에서 헤더 요소를 꺼내서 처리합니다. 결점은 하나도 처리하지 않았습니다. 왼쪽에서 오른쪽까지의 순서에 따라 모든 하위 결점을 대열에 넣는 것입니다.
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0

typedef int Status;
typedef char TElemType;

// 
typedef struct BiTNode
{
    TElemType data;
    struct BiTNode * lchild;
    struct BiTNode * rchild;
}BiTNode,*BiTree;

typedef BiTree QElemtype;
// 
typedef struct
{
    QElemtype data[MAXSIZE];
    int front;
    int rear;
}sqQueue;

// 
Status InitQueue(sqQueue * Q)
{
    Q->front=0;
    Q->rear=0;
    return OK;
}

// 
Status QueueLength(sqQueue Q)
{
    return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}

// 
Status EnQueue(sqQueue * Q, QElemtype e)
{
    if((Q->rear+1)%MAXSIZE==Q->front)
    {
        return ERROR;
    }
    Q->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%MAXSIZE;
    return OK;
}


// 
Status DeQueue(sqQueue * Q,QElemtype * e)
{
    if(Q->front==Q->rear)
    {
        return ERROR;
    }
    *e=Q->data[Q->front];
    Q->front=(Q->front+1)%MAXSIZE;
    return OK;
}


// 
void CreateBiTree(BiTree * T)
{
    TElemType ch;
    scanf("%c",&ch);
    if(ch=='#')
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));
    }
    if(!*T)
    {
        return ;
    }
    else
    {
        (*T)->data=ch;
        CreateBiTree(&(*T)->lchild); //  CreateBiTree(&(*T)->rchild); //  } } // ( ) void LevelOrder(BiTree * T,sqQueue * Q) { if(*T) { EnQueue(Q,(*T)); } while(QueueLength((*Q))!=0) { DeQueue(Q,&(*T)); printf("%c ",(*T)->data); //  if((*T)->lchild!=NULL) { EnQueue(Q,(*T)->lchild); } if((*T)->rchild!=NULL) { EnQueue(Q,(*T)->rchild); } } printf("
"
)
; } int main() { sqQueue Q; BiTree root; InitQueue(&Q); printf("please enter the data:
"
)
; CreateBiTree(&root); printf("LevelOrdertraversal the data:
"
)
; LevelOrder(&root,&Q); return 0; }

좋은 웹페이지 즐겨찾기