二叉树层次遍历,VUA122

来源:互联网 发布:webbench linux 编辑:程序博客网 时间:2024/06/06 12:58


Trees on the level
http://www.bnuoj.com/v3/problem_show.php?pid=17261


(11,LL) (7,LLL) (8,R)(5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()(3,L) (4,R) ()

Sample Output

5 4 8 11 13 4 7 2 1not complete
#include <iostream>#include<queue>#include<cstdio>#include<cstring>#include<vector>using namespace std;const int maxn=100000+10;struct Node{    bool have_value;    int v;    Node *left,*right;    Node():have_value(false),left(NULL),right(NULL) {}};Node* root;bool failed;Node* newnode(){    return new Node();}void remove_tree(Node* u){    if(u==NULL) return ;    remove_tree(u->left);    remove_tree(u->right);    delete 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=true;    u->v=v;    u->have_value=true;}bool read_input(){    failed=false;    remove_tree(root);    root=newnode();    for(;;)    {        char s[10000];        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->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;}int main(){    while(read_input())    {        vector<int>ans;        if(!failed&&bfs(ans))        {            for(int i=0; i<ans.size()-1; i++ )                cout<<ans[i]<<" ";            cout<<ans[ans.size()-1]<<endl;        }        else cout<<"not complete"<<endl;    }    return 0;}


0 0
原创粉丝点击