zoukankan      html  css  js  c++  java
  • UVA-122(Trees on the level)

    Trees on the level

    题目链接:

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

    题目意思:

    给你一些(,)让你建立一棵树,直到输入()结束建树,然后判断树是否完整,如果没有结点未赋值或者被赋值两次,就按层次遍历输出树,否则输出not complete

    代码:

    #include <algorithm>
    #include <malloc.h>
    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    #include <queue>
    #include <stack>
    const int maxn=10010;
    using namespace std;
    typedef struct node
    {
        int data;
        struct node *lchild;
        struct node *rchild;
    };
     
    bool judge(node *b)
    {
        queue <node*> q;
        while(!q.empty()) q.pop();
        q.push(b);
        while(!q.empty())
        {
            node *u = q.front();
            q.pop();
            if(u->data < 0) return false;
            if(u->lchild != NULL)q.push(u->lchild);
            if(u->rchild != NULL)q.push(u->rchild);
        }
        return true;
    }
    void LevelOrder(node *b)
    {
        node *p;
        queue <node*> q;
        while(!q.empty())q.pop();
        q.push(b);
        while(!q.empty())
        {
            p = q.front();
            q.pop();
            if(p->data == b->data) printf("%d",p->data);
            else printf(" %d",p->data);
            if(p->lchild!=NULL) q.push(p->lchild);
            if(p->rchild!=NULL) q.push(p->rchild);
        }
        printf("
    ");
    }
    void Destroy(node *&b)
    {
        node *p;
        queue <node*> q;
        while(!q.empty())q.pop();
        q.push(b);
        while(!q.empty())
        {
            p = q.front();
            q.pop();
            if(p->lchild!=NULL) q.push(p->lchild);
            if(p->rchild!=NULL) q.push(p->rchild);
            free(p);
        }
    }
    int main()
    {
    //    freopen("in.txt","r",stdin);
    //    freopen("out.txt","w",stdout);
        node *root;
        root = (node *)malloc(sizeof(node));
        root->lchild = NULL;
        root->rchild = NULL;
        root->data = -1;
        char s[maxn],number[maxn];
        int i,flag=0;
        node *p,*b;
        while(scanf("%s",s)!=EOF)
        {
    //        printf("%s
    ",s);
            if(strcmp(s,"()")!=0)
            {
                int j=0;
                for(i=1; i<strlen(s); i++)
                {
                    if(s[i]==',')break;
                    number[j]=s[i];
                    j++;
                }
                number[j] = '';
                i++;
                p=root;
                while(1)
                {
                    if(s[i]==')')break;
                    else if(s[i]=='L')
                    {
                        if(p->lchild==NULL)
                        {
                            b = (node *)malloc(sizeof(node));
                            p->lchild = b;
                            b->data = -1;
                            b->lchild = NULL;
                            b->rchild = NULL;
                            p=b;
                        }
                        else
                            p = p->lchild;
                    }
                    else if(s[i]=='R')
                    {
                        if(p->rchild==NULL)
                        {
                            b = (node *)malloc(sizeof(node));
                            p->rchild = b;
                            b->data = -1;
                            b->lchild = NULL;
                            b->rchild = NULL;
                            p=b;
                        }
                        else
                            p = p->rchild;
                    }
                    i++;
                }
                if(p->data<0) p->data = atoi(number);
                else flag=1;
            }
            else
            {
                if(judge(root)&&flag!=1)
                {
                    LevelOrder(root);
                    Destroy(root);
                    root = (node *)malloc(sizeof(node));
                    root->lchild = NULL;
                    root->rchild = NULL;
                    root->data = -1;
                    flag=0;
                }
                else
                {
                    printf("not complete
    ");
                    Destroy(root);
                    root = (node *)malloc(sizeof(node));
                    root->lchild = NULL;
                    root->rchild = NULL;
                    root->data = -1;
                    flag=0;
                }
            }
        }
        return 0;
    }
    //节点未赋值  或者同一个节点赋值两次   就输出not complete 
  • 相关阅读:
    Win7系统中打开exe 无反应
    IE 浏览器主页劫持 如何修复
    win10 airpods显示已配对,但就是连不上怎么办?
    tp5 layui 渲染 时间戳转换为日期时间格式
    为什么要设置 繁琐的密码
    美食摄影 – 明确目的
    MsMpEng.exe进程停止删除或弹出设备,导致移动硬盘无法正常弹出,怎么办?
    单抗热门靶点 | VEGF | TNF-α | CD20 | HER2 | PD-1 | IL-6R | CD47
    EZH2 | Ezh2 | 组蛋白甲基化酶/组蛋白甲基转移酶
    宇宙微波背景辐射 | 著名实验
  • 原文地址:https://www.cnblogs.com/20172674xi/p/10017750.html
Copyright © 2011-2022 走看看