原题复刻
思想的火花 :
首先要层序操作是什么意思,题主就使用了STL中的queue来做,关注函数的书写规则,被‘&’和'*'两种操作搞了半天。
#include<iostream>
#include<queue>
using namespace std;
struct node
{
char data;
struct node *l,*r;
};
void built(node* &root)
{
char x;
if(!(cin >>x))exit(0);
if(x=='#')root=NULL;
else
{
root=new node;
root->data=x;
built(root->l);
built(root->r);
}
}
void cengxv(node *root)
{
if(!root)return;
queue<node*>q;
q.push(root);
while(!q.empty())
{
node *now=q.front();
q.pop();
cout<<" "<<now->data;
if(now->l)q.push(now->l);
if(now->r)q.push(now->r);
}
}
int main()
{
node* root;
built(root);
cengxv(root);
}
//补个string版
#include<iostream>
#include<queue>
using namespace std;
string a;
struct node
{
char data;
struct node *l,*r;
};
void built(node* &root)
{
static int i=0;
if(i==a.size())return;
char x=a[i++];
if(x=='#')root=NULL;
else
{
root=new node;
root->data=x;
built(root->l);
built(root->r);
}
}
void cengxv(node *root)
{
if(!root)return;
queue<node*>q;
q.push(root);
while(!q.empty())
{
node *now=q.front();
q.pop();
cout<<" "<<now->data;
if(now->l)q.push(now->l);
if(now->r)q.push(now->r);
}
}
int main()
{
node* root;
cin>>a;
built(root);
cengxv(root);
}