zoukankan      html  css  js  c++  java
  • 【紫书】Trees on the level UVA

    题意:给你一些字符串,代表某个值被插入树中的位置。让你输出层序遍历。

    题解:动态建树。

       由于输入复杂,将输入封装成read_input。注意输入函数返回的情况

       再将申请新节点封装成newnode().

       最后层序输出直接用bfs实现。

    坑:我把ans.clear放到主程序的if里面,导致某特定情况无法初始化,wa了一页//以后debug真的别XJB改细节了上下语句顺序,一些无关紧要的处理,改之前想一想

    #define _CRT_SECURE_NO_WARNINGS
    #include "stdio.h"
    #include<stdio.h>
    #include<algorithm>
    #include<string>
    #include<vector>
    #include<list>
    #include<set>
    #include<iostream>
    #include<string.h>
    #include<queue>
    using namespace std;
    const int maxn = 300;
    char s[maxn];
    int failed;
    struct node {
        int v;
        bool have_v;
        node* leftson, *rightson;
        node() :have_v(false), leftson(NULL), rightson(NULL) {}
    }*root;
    node* newnode() { return new node(); }
    void addnode(int v, char *s) {
        int n = strlen(s);
        node * now = root;
    
        for (int i = 0; i < n - 1; i++) {
            if (s[i] == 'L') {
    
                if (now->leftson == NULL) now->leftson = newnode();
                now = now->leftson;
            }
            else {
                if (now->rightson == NULL) now->rightson = newnode();
                now = now->rightson;
            }
    
        }
        if (now->have_v) { failed = 1; }
        now->v = v;
        now->have_v = 1;
    }
    bool read_input() {
        failed = false; root = newnode();
        while (1) {
            while (scanf("%s", &s) != 1)return false;
            if (s[1] == ')')break;
            int v;
            sscanf(&s[1], "%d", &v);
            addnode(v, strchr(s, ',') + 1);
        }
        return true;
    }
    list<int>ans;
    void bfs() {
        ans.clear();
        queue<node> Q;
        node now;
        //int vis[maxn];
        Q.push(*root);
        while (!Q.empty()) {
            now = Q.front(); if (!now.have_v) { failed = 1; break; }
            Q.pop();
            if (now.leftson != NULL)Q.push(*now.leftson);
            if (now.rightson != NULL)Q.push(*now.rightson);
            ans.push_back(now.v);
        }
    
    }
    int main() {
        while (read_input()) {
            bfs();
            if (failed)cout << "not complete" ;
            else
            {
                cout << ans.front(); ans.pop_front();
                for (auto t : ans)cout << ' ' << t;
            }
            cout << endl;
        }
    
        system("pause");
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    .NET 分布式自增Id组件(解决自动分配机器Id、时间回拨问题)
    简洁实用Socket框架DotNettySocket
    Colder框架硬核更新(Sharding+IOC)
    .NET Core开源快速开发框架Colder发布 (NET Core2.1+AdminLTE版)
    .NET开源快速开发框架Colder发布 (NET452+AdminLTE版)
    .NET 跨平台RPC框架DotNettyRPC
    Web后台快速开发框架(.NET Core)
    Web后台快速开发框架
    EasyWcf------无需配置,无需引用,动态绑定,轻松使用
    C# .NET 0配置使用Wcf(半成品)
  • 原文地址:https://www.cnblogs.com/SuuT/p/8808367.html
Copyright © 2011-2022 走看看