算法的基本思想:依次输入结点信息,若输入的结点不是虚结点,则建立一个新结点;若新结点是第1个结点,则令其为根节点;否则将新结点作为孩子链接到它的双亲结点上。如此重复下去,直到输入字符“#”为止

核心代码:

Bitree level_create(){
    char ch;
    pointer Q[maxsize+1];
    int front,rear;
    pointer root,s;
    root=NULL;
    front=rear=0;
    while(cin>>ch,ch!='#'){
        if(ch!='@'){
            s=new node;
            s->data=ch;
            s->lchild=s->rchild=NULL;
        }
        else s=NULL;
        rear++;//不管结点是否为虚,都要入队
        Q[rear]=s;
        if(rear==1){//第一个结点是根,要修改头指针,它不是孩子
            root=s;
            front=1;
        }
        else{
            if(s&&Q[front]){
                if(rear%2==0)Q[front]->lchild=s;
                else Q[front]->rchild=s;
            }
            if(rear%2==1)front++;//不论是否为虚,右孩子入队后,双亲出队
        }
    }
    return root;
}