• Vijos 1132 求二叉树的先序序列


    描述

    给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。

    格式

    输入格式

    第一行为二叉树的中序序列
    第二行为二叉树的后序序列

    输出格式

    一行,为二叉树的先序序列

    样例1

    样例输入1

    BADC
    BDCA

    样例输出1

    ABCD

    限制

    每个测试点1s

    来源

    noip2001普及组第三题
    <br/ >
    <br/ >
    解析:根据中序序列和后续序列构造出这棵二叉树,再先序遍历即可。

    #include <iostream>
    #include <string>
    using namespace std;
    
    string s1, s2;
    
    struct Node{
        char val;
        Node *l , *r;
        Node(){
            l = NULL;
            r = NULL;
        }
    };
    
    Node* build(const string& s1, const string& s2)
    {
        Node *root = new Node();
        root->val = *(s2.end()-1);
        size_t pos = s1.find(root->val);
        if(pos != 0){
            string left_s1 = s1.substr(0, pos);
            string left_s2 = s2.substr(0, pos);
            root->l = build(left_s1, left_s2);
        }
        if(pos != s1.length()-1){
            string right_s1 = s1.substr(pos+1);
            string right_s2 = s2.substr(pos, s2.length()-1-pos);
            root->r = build(right_s1, right_s2);
        }
        return root;
    }
    
    void pre_order(Node *root)
    {
        if(root != NULL){
            cout<<root->val;
            pre_order(root->l);
            pre_order(root->r);
        }
    }
    
    void destroy(Node *root)
    {
        if(root->l != NULL)
            destroy(root->l);
        if(root->r != NULL)
            destroy(root->r);
        delete root;
    }
    
    int main()
    {
        cin>>s1>>s2;
        Node *root = build(s1, s2);
        pre_order(root);
        destroy(root);
        return 0;
    }
    
    
  • 相关阅读:
    poj3181(Dollar Dayz)
    poj3666(Making the Grade)
    poj2392(Space Elevator)
    hdu5288(OO’s Sequence)
    hdu5289(Assignment)
    快学scala
    Spark Checkpointing
    Spark Performance Tuning (性能调优)
    Spark Memory Tuning (内存调优)
    Sparkstreaming and Kafka
  • 原文地址:https://www.cnblogs.com/inmoonlight/p/5954407.html
Copyright © 2020-2023  润新知