算法竞赛入门经典6.3.2层次遍历
2014-05-19 10:46
337 查看
算法竞赛入门经典6.3.2层次遍历
输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个节点的值。每个节点都按照从根节点到它的移动序列给出(L表示左,R表示右)。在输入中,每个节点的左括号之间没有空格,相邻节点之间用一个空格隔开。每棵树的输入用一对空括号()结束(这对括号本身不代表一个结点),如图所示。5
4 8
11 13 4
7 2 1
注意,如果从根到某个叶节点的路径上有的结点没有再输入中给出,或者给出了超过一次,应当输出-1.结点个数不超过256.
样例输入:
(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()
(3,L) (4,R) ()
样例输出:
5 4 8 11 13 4 7 2 1
-1
#include<iostream>
using namespace std;
const int MAXN=256;
char s[MAXN+10];
int n,ans[MAXN];
int failed;
typedef struct Tnode
{
int have_value;
int v;
struct Tnode* left,*right;
}Node;
Node* root;
Node* newnode()
{
Node* u=(Node*) malloc(sizeof(Node));
if(u!=NULL)
{
u->have_value=0;
u->left=u->right=NULL;
}
return u;
}
void addnode(int v,char* s)
{
int n=strlen(s);
Node* u=root;
for(int i=0;i<n;++i)
{
if(s[i]=='L')
{
if(u->left==NULL)u->left=newnode();
u=u->left;
}
else if(s[i]=='R')
{
if(u->right==NULL)u->right=newnode();
u=u->right;
}
}
if(u->have_value)
failed=1;
u->v=v;
u->have_value=1;
}
void remove_tree(Node* u)
{
if(u==NULL)
return;
remove_tree(u->left);
remove_tree(u->right);
free(u);
}
int read_input()
{
failed=0;
remove_tree(root);
root=newnode();
for(;;)
{
if(scanf("%s",s)!=1)
return 0;
if(!strcmp(s,"()"))
break;
int v;
sscanf(&s[1],"%d",&v);
addnode(v,strchr(s,',')+1);
}
return 1;
}
int bfs()
{
int front=0;
int rear=1;
Node* q[MAXN];
q[0]=root;
while(front<rear)
{
Node* u=q[front++];
if(!u->have_value)
return 0;
ans[n++]=u->v;
if(u->left!=NULL)
q[rear++]=u->left;
if(u->right!=NULL)
q[rear++]=u->right;
}
return 1;
}
int main()
{
read_input();
bfs();
if(failed==1)
cout<<"-1"<<endl;
else
for(int i=0;i<n;++i)
cout<<ans[i]<<" ";
system("pause");
return 0;
}
相关文章推荐
- 【算法入门经典】6.3.2 层次遍历二叉树【结构体指针】
- 算法竞赛入门经典 第六章层次遍历
- 刘汝佳算法入门经典第二版 二叉树的层次遍历
- {算法竞赛入门经典}第二章 如何判断整数
- {算法竞赛入门经典}第二章 习题解答及例题小结
- 算法竞赛入门经典 3.2 字符数组
- 算法竞赛入门经典 8.3.1 棋盘覆盖问题
- 算法竞赛入门经典 例题8-1
- 算法竞赛-入门经典 第二章上机练习
- 算法竞赛入门经典 例题7-2 埃及分数
- 算法竞赛入门经典 第二章 上机练习(C++代码)
- 算法竞赛入门经典 2.1 for 循环
- 算法竞赛入门经典 例题7-3 倒水问题
- {算法竞赛入门经典}第三章 蛇形填数 边界预判
- 算法竞赛入门经典2-10 用1,2,3,4,5,6,7,8,9组成3个三位数 abc:def:ghi=1:2:3
- 算法竞赛入门经典 3.2 字符数组
- {算法竞赛入门经典}第二章 文件操作 重定向及fopen版本
- 20100617--算法竞赛入门经典 语言篇读书笔记
- 算法竞赛入门经典 1.1 算术表达式
- 算法竞赛入门经典 3.3 最长回文子串