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