UVA122 二叉树的层次遍历

题目链接

https://vjudge.net/problem/UVA-122

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const int maxn=256+10;
char s[maxn];
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();}
bool failed;
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;
}
void remove_tree(Node *u)
{
    if(u==NULL)return;
    remove_tree(u->left);
    remove_tree(u->right);
    delete u;
}
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,"()")==0)break;
        int v;
        sscanf(&s[1],"%d",&v);
        addnode(v,strchr(s,',')+1);
    }
    return true;
}
int main()
{
vector<int>ans;
while(read_input())
{
    if(!bfs(ans))failed=1;
       if (failed) printf("not complete\n");
        else {
            for (int i = 0; i < ans.size(); i++) {
                if (i != 0) printf(" ");
                printf("%d", ans[i]);
            }
            printf("\n");
        }
    }
  

return 0;
}

 

posted @ 2019-07-02 23:29  hh13579  阅读(151)  评论(0编辑  收藏  举报