C語言按層次遍歷二叉樹算法

jopen 9年前發布 | 6K 次閱讀 C/C++

#define MaxSize 1000
typedef char ElemType;
typedef struct node
{
    ElemType data;
    struct node lchild;
    struct node rchild;
} BTNode;
//創建二叉樹
void CreateBTNode(BTNode &b,char str)
{
    BTNode St[MaxSize],p=NULL;
    int top=-1,k,j=0;
    char ch;
    b=NULL;
    ch=str[j];
    while(ch!='\0')
    {
        switch(ch)
        {
        case '(':top++;St[top]=p;k=1;break;
        case ')':top--;break;
        case ',':k=2;break;
        default:p=(BTNode )malloc(sizeof(BTNode));
            p->data=ch;p->lchild=p->rchild=NULL;
            if(b==NULL) b=p;
            else
            {
                switch(k)
                {
                case 1:St[top]->lchild=p;break;
                case 2:St[top]->rchild=p;break;
                }
}
}
j++; ch=str[j]; }
} //層次遍歷算法 void LevelOrder(BTNode
b) { BTNode p; BTNode qu[MaxSize]; int front,rear; front=rear=-1; rear++; qu[rear]=b; while(front != rear) { front=(front+1)%MaxSize; p=qu[front]; printf("%c ",p->data);

    if(p->lchild!=NULL)
    {
        rear=(rear+1)%MaxSize;
        qu[rear]=p->lchild;
    }

    if(p->rchild!=NULL)
    {
        rear=(rear+1)%MaxSize;
        qu[rear]=p->rchild;
    }
}

}

//主函數 int main() { BTNode b,h; char s[MaxSize] = "A(B(D(,G)),C(E,F))";

CreateBTNode(b,s);
printf("層次遍歷算法的訪問次序為:");
LevelOrder(b);
printf("\n請輸入二叉樹括號表示法字符串:\n");
return 0;

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!