您的位置:首页 > 其它

生活的烦恼

2018-01-11 16:25 183 查看
描述
生活的暑假刚集训开始,他要决心学好字典树,二叉树,线段树和各种树,但生活在OJ上刷题的时候就遇到了一个特别烦恼的问题。那当然就是他最喜欢的二二叉树咯!题目是这样的:给你一颗非空的二叉树,然后再给你一个整数n,让生活输出这颗二叉树的第n(n>0且n<=树的深度)层,出题者为了给生活降低难度,要求两个输出数据之间用'~'隔开。看来我们的出题人很有爱啊!



输入第一行输入一个数N,表示有N组测试数据。接下来N行,每行一个字符串,用'#'表示为空的节点,树的结束标志为'@'。'@'后仅有一个空格,空格后为一个数字,表示生活要输出的二叉树的第几层!输出每行输出一个字符串,表示给出二叉树的第n层!样例输入
2
1 2 # # 3 # # @ 1
5 7 3 # # # 4 # # @ 3

样例输出
1
3

提示5 第一层

/ \

7 4 第二层

/

3 第三层

‘@’是没用的.。看数据结构书上打的和,层次遍历不会看的博客,。。

#include <iostream>
#include<cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <stack>
#include <queue>
#define LL long long
using namespace std;
string ch;
typedef struct BiTNode
{
string data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreatTree(BiTree &T)
{
cin>>ch;
if(ch[0]=='#') T=NULL;
else
{
T=new BiTNode;
T-> data=ch;
CreatTree(T->lchild);
CreatTree(T->rchild);
}
}
queue<string>ans;
void preOrder(BiTree &r,int curLever,int lever)(按指定层次遍历)
{
if(r==NULL)
return;
if(lever==curLever)
{
ans.push(r->data);
return;
}
preOrder(r->lchild ,curLever+1,lever);
preOrder(r->rchild ,curLever+1,lever);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
string cc;
BiTree T;
int lever;
CreatTree(T);
cin>>cc;
cin>>lever;
preOrder(T,1,lever);
int len=ans.size();
if(len>1)
{
for(int i=0;i<len-1;i++)
{
cout<<ans.front()<<'~';
ans.pop();
}
}
cout<<ans.front()<<endl ;
ans.pop();
}
}

生活的烦恼,生活有很多烦恼,我也不知道怎么这么多的烦恼。可能这么快就2018了,可能这么快就老了吧,可能我还得学网络流,可能我还没减肥成功,可能我还有个讨厌的·要交的文档没填,可能还是我太菜了,可能我想出去玩,总之,有点烦,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: