大意了,写完才发现要求是用前序遍历建二叉树,绷不住了;但是写都写了是吧;
代码附上
//层次遍历建树
#include<bits/stdc++.h>
using namespace std;
typedef struct Tree{
int val;
struct Tree *lt,*rt;
}tree;
//建一个根节点
void creatroot(tree * &root){
root=(tree*)malloc(sizeof(tree));
root->lt=NULL;
root->rt=NULL;
}
//队列存节点
queue<Tree*>q;
//建树
void creat(tree * &t){
tree *p,*root,*l,*r;
int cnt;
q.push(t);
cin>>cnt;
while(cnt!=123123){
p=q.front();
//用完出栈
q.pop();
p->val=cnt;
//对左右子树初始化
l=(tree*)malloc(sizeof(tree));
l->val=-99999;//设立一个阈值
l->lt=NULL;
l->rt=NULL;
r=(tree*)malloc(sizeof(tree));
r->val=-99999;
r->lt=NULL;
r->rt=NULL;
//与父节点连接
p->lt=l;
p->rt=r;
//入栈
q.push(l);
q.push(r);
cin>>cnt;
}
}
//遍历树
//print1 前序
void print1(Tree *t){
if(t!=NULL&&t->val!=-99999){
cout<<t->val<<" ";
print1(t->lt);
print1(t->rt);
}
}
//中序遍历
void print2(Tree *t){
if(t!=NULL&&t->val!=-99999){
print2(t->lt);
cout<<t->val<<" ";
print2(t->rt);
}
}
//后续遍历
void print3(Tree *t){
if(t!=NULL&&t->val!=-99999){
print3(t->lt);
print3(t->rt);
cout<<t->val<<" ";
}
}
int main(){
tree *t;
// (tree*)malloc(sizeof(tree));
creatroot(t);
creat(t);
// cout<<t->val;
printf("前序遍历\n");
print1(t);
printf("\n中序遍历\n");
print2(t);
printf("\n后序遍历\n");
print3(t);
return 0;
}