zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
  • 相关阅读:
    安装mongoDB时,总是报错,启动不了
    koa2路由
    异步操作async await
    nodeJs koa-generator脚手架
    nodeJs学习-19 个人博客案例-(1)数据字典
    nodeJs学习-18 mysql数据库了解
    nodeJs学习-17 博客案例
    nodeJs学习-16 数据字典示例
    前端图片压缩后,文件流上传
    Linux用户名显示-bash-4.1$快速排查
  • 原文地址:https://www.cnblogs.com/inmoonlight/p/5954407.html
Copyright © 2011-2022 走看看