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");
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    poj 3321 Apple Tree
    hdu 1520 Anniversary party
    Light OJ 1089 Points in Segments (II)
    Timus 1018 Binary Apple Tree
    zoj 3299 Fall the Brick
    HFUT 1287 法默尔的农场
    Codeforces 159C String Manipulation 1.0
    GraphQL + React Apollo + React Hook 大型项目实战(32 个视频)
    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
    GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
  • 原文地址:https://www.cnblogs.com/SuuT/p/8808367.html
Copyright © 2011-2022 走看看