二叉树的层序生成
算法的基本思想:依次输入结点信息,若输入的结点不是虚结点,则建立一个新结点;若新结点是第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;
}