uva-122 树的层次遍历

来源:互联网 发布:分布式通信 java 编辑:程序博客网 时间:2024/05/21 11:12

uva 122
白书代码

#include <cstdio>#include <cstring>#include <vector>#include <queue>using namespace std;const int maxn=300;char s[maxn];bool failed;struct node{    bool have_value;    int v;    node *left,*right;    node():have_value(false),left(NULL),right(NULL){}};node* root;node* newnode(){return new node();}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=true;    u->v=v;    u->have_value=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->have_value)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;}bool read_input(){    failed=false;    root=newnode();    for(;;){        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;}int main() {    vector<int> v;    while(read_input()){        bool flag=bfs(v);        int size=v.size();        if(!flag||failed)printf("not complete\n");        else for(int i=0;i<size;i++)printf(i==size-1?"%d\n":"%d ",v[i]);    }    return 0;}
原创粉丝点击