Description
已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于50个字符的字符串。
Output
按从上到下从左到右的顺序输出二叉树的叶子结点。
Sample
Input
abd,eg,cf,
xnl,i,u,
Output
dfg
uli
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
node *l,*r;
}Tree;
char pre[55];
int cnt=0;
Tree* buildtree_pre()
{
if(pre[cnt]==',')
{
cnt++;
return NULL;
}
Tree *root = new Tree;
root->data = pre[cnt++];
root->l = buildtree_pre();
root->r = buildtree_pre();
return root;
}
//思路和层次遍历差不多
void leave_out(Tree *root)
{
queue<Tree *> t;
t.push(root);
while(!t.empty())
{
root = t.front();
t.pop();
if(root)
{
if(!root->l && !root->r)
cout<<root->data;
t.push(root->l);
t.push(root->r);
}
}
}
int main()
{
ios::sync_with_stdio(false);
Tree *root;
while(cin>>pre)
{
cnt=0;
root = buildtree_pre();
leave_out(root);
cout<<endl;
}
return 0;
}