标签:des style blog http io ar os sp for

The Output
Sample Output
not complete
题目大意:输入一颗二叉树,将它按从上到下、从左到右的顺序输出各个节点位置。
思路:先根据输入的字符串将二叉树建立起来(注:可能出现不能建立的情况),若能
成功建立,则用宽度优先搜索(BFS)的方法遍历所有节点,并在遍历的时候,把结果
存下来,然后进行输出。
注意:BFS需要用到队列。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int flag = 1;
struct Node
{
bool IsValue;
int v;
Node *left,*right;
Node():IsValue(false),left(NULL),right(NULL){}
};
Node *root;
Node* newnode()
{
return new Node();
}
void addnode(int v,char *s)
{
int len = strlen(s);
Node *u = root;
for(int i = 0; i < len; 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->IsValue)
flag = 0;
u->v = v;
u->IsValue = true;
}
char s[300];
bool read_input()
{
flag = 1;
root = newnode();
while(1)
{
if(scanf("%s",s)!=1)
return false;
if(!strcmp(s,"()"))
break;
int v;
sscanf(&s[1],"%d",&v);
addnode(v, strchr(s,',')+1);
}
return true;
}
bool bfs(vector<int>& ans)
{
queue<Node*> q;
ans.clear();
q.push(root);
while(!q.empty())
{
Node* u = q.front();
q.pop();
if(!u->IsValue)
return false;
ans.push_back(u->v);
if(u->left != NULL)
q.push(u->left);
if(u->right != NULL)
q.push(u->right);
}
return true;
}
int main()
{
vector<int> ans;
while(read_input())
{
if(!bfs(ans))
flag = 0;
if(flag==0)
printf("not complete\n");
else
{
for(int i = 0; i < ans.size(); i++)
{
if(i==ans.size()-1)
printf("%d\n",ans[i]);
else
printf("%d ",ans[i]);
}
}
}
return 0;
}
UVA122 Trees on the level【二叉树】【BFS】
标签:des style blog http io ar os sp for
原文地址:http://blog.csdn.net/lianai911/article/details/41862267