zoukankan      html  css  js  c++  java
  • HDU 1622

    http://acm.hdu.edu.cn/showproblem.php?pid=1622

    白书上6.3.2二叉树层次遍历的例题,层次遍历用bfs,建立二叉树,很基础的题目

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <queue>
    
    using namespace std;
    
    struct node{
        int vis,v;
        node *l,*r;
    };
    
    node *root;
    
    node* newnode(){
        node *u=new node;
        if(u!=NULL){
            u->vis=0;
            u->l=u->r=NULL;
        }
        return u;
    }
    
    int failed;
    
    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->l==NULL)u->l=newnode();
                u=u->l;
            }
            else if(s[i]=='R'){
                if(u->r==NULL)u->r=newnode();
                u=u->r;
            }
        }
        if(u->vis)failed=1;
        u->v=v;
        u->vis=1;
    }
    
    char s[305];
    
    void remove_tree(node* u){
        if(u==NULL)return;
        remove_tree(u->l);
        remove_tree(u->r);
        delete u;
    }
    
    int input(){
        failed=0;
        remove_tree(root);
        root=newnode();
        while(1){
            if(scanf("%s",s)==EOF)return 0;
            if(!strcmp(s,"()"))break;
            int v;
            sscanf(&s[1],"%d",&v);
            addnode(v,strchr(s,',')+1);
        }
        return 1;
    }
    
    int st,ans[305];
    
    int bfs(){
        queue <node*> q;
        q.push(root);
        while(!q.empty()){
            node* u=q.front();
            q.pop();
            if(u->vis==0)return 0;
            ans[st++]=u->v;
            if(u->l!=NULL)q.push(u->l);
            if(u->r!=NULL)q.push(u->r);
        }
        return 1;
    }
    
    int main(){
        while(input()){
            if(failed)puts("not complete");
            else{
                st=0;
                if(!bfs())puts("not complete");
                else{
                    for(int i=0;i<st;i++){
                        if(!i)
                            printf("%d",ans[i]);
                        else 
                            printf(" %d",ans[i]);
                    }
                    putchar('
    ');
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    微服务云部署
    监控linux服务器
    k6 常见测试模式说明
    k6 使用参考
    dremio 开发测试简单说明
    cube.js prepareCompiler api 试用
    cube.js schema 预编译处理
    cube.js driver 开发一些说明
    cube.js mssql driver 问题
    cube.js s3 FileRepository 新功能
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/4116322.html
Copyright © 2011-2022 走看看