二叉树

作者: burglar | 来源:发表于2017-03-05 14:36 被阅读0次

    按层次遍历的顺序构建二叉树(非递归)
    切记:千万不要返回一个空指针(NULL pointer)

    #include<stdlib.h>
    #define MAX 50
    typedef struct BTNode{
        int val;
        struct BTNode* lchild;
        struct BTNode* rchild;
    }BTNode;
    void init(BTNode** bt){
        *bt=NULL;
    }
    void insert_level(int x,BTNode** bt){
        if(*bt==NULL){
            *bt=malloc(sizeof(BTNode));
            (*bt)->lchild=(*bt)->rchild=NULL;
            (*bt)->val=x;
        }else{
            BTNode* que[MAX];
            int front=0,rear=0;
            BTNode* p=*bt;
            rear=(rear+1)%50;
            que[rear]=p;
            while(front!=rear){
                front=(front+1)%50;
                p=que[front];
                if(p->lchild){
                    rear=(rear+1)%50;
                    que[rear]=p->lchild;
                }else{
                    p->lchild=malloc(sizeof(BTNode));
                    p=p->lchild;
                    p->lchild=p->rchild=NULL;
                    p->val=x;
                    break;
                }
                if(p->rchild){
                    rear=(rear+1)%50;
                    que[rear]=p->rchild;
                }else{
                    p->rchild=malloc(sizeof(BTNode));
                    p=p->rchild;
                    p->lchild=p->rchild=NULL;
                    p->val=x;
                    break;
                }
            }
        }
    }
    void makeTree(BTNode** bt){
        init(bt);
        int val;
        while(scanf("%d",&val)==1){
            insert_level(val,bt);
        }
    }
    void display(BTNode* bt){
        if(bt){
            printf("%d ",bt->val);
            display(bt->lchild);
            display(bt->rchild);
        }
    }
    

    相关文章

      网友评论

          本文标题:二叉树

          本文链接:https://www.haomeiwen.com/subject/frfegttx.html