不要忘记引入queue队列头文件
typedef int telemtype;
struct bitnode{
telemtype data;
bitnode* lchild;
bitnode* rchild;
};
typedef bitnode* bitree;//指向相同类型的指针
创建二叉树
void createdbitree(bitree& t){
int ch;
cin>>ch;
if(ch==0)
t=NULL;
else{
t=(bitnode*)malloc(sizeof(bitnode));
t->data=ch; 先序创建
createdbitree(t->lchild);递归
createdbitree(t->rchild);
}
}
先序输出
void xoutput(bitree& t){//先序
if(t){
cout<<t->data<<" ";
xoutput(t->lchild);
xoutput(t->rchild);
}
}
中序输出
void zoutput(bitree& t){//中序
if(t){
zoutput(t->lchild);
cout<<t->data<<" ";
zoutput(t->rchild);
}
}
后序输出
void houtput(bitree& t){//后序
if(t){
houtput(t->lchild);
houtput(t->rchild);
cout<<t->data<<" ";
}
}
//层序遍历
void treaver(bitree& t){
queue<bitnode*>rel;
bitree p;
p=t;
rel.push(p);
while(!rel.empty()){
bitnode* front=rel.front();//返回队首元素 ,但没有删除
cout<<front->data<<" ";
rel.pop();//删除队首元素,但没有返回
if(front->lchild!=NULL)//判断左子树是否为空
rel.push(front->lchild);//若不空则压入队列
if(front->rchild!=NULL)
rel.push(front->rchild);
}
}
在main函数中调用
int main(){
bitree b;
createdbitree(b);
xoutput(b);
cout<<endl;
zoutput(b);
cout<<endl;
houtput(b);
cout<<endl;
treaver(b);
return 0;
}