• UVA536 二叉树重建 Tree Recovery


    根据先序和中序确定后序。树中每个结点的值都是不同的,不需要特判了。

    递归构造完左右子树后输出根即为后序。

    string pre,in;
    unordered_map<char,PII> tree;
    unordered_map<char,int> pos;
    
    int build(int prel,int prer,int inl,int inr)
    {
        if(prel > prer) return -1;
    
        char root=pre[prel];
        int k=pos[root];
        int leftlen=k-inl;
        int lchild=build(prel+1,prel+leftlen,inl,k-1);
        int rchild=build(prel+leftlen+1,prer,k+1,inr);
        cout<<root;
        tree[root]={lchild,rchild};
        return root;
    }
    
    int main()
    {
        while(cin>>pre>>in)
        {
            for(int i=0;i<in.size();i++) pos[in[i]]=i;
            build(0,pre.size()-1,0,in.size()-1);
            cout<<endl;
        }
        //system("pause");
        return 0;
    }
    

    (update)
    对代码作了些许简化。

    string pre,in;
    unordered_map<char,int> pos;
    
    int build(int prel,int prer,int inl,int inr)
    {
        if(prel > prer) return -1;
    
        char root=pre[prel];
        int k=pos[root];
        int leftlen=k-inl;
        build(prel+1,prel+leftlen,inl,k-1);
        build(prel+leftlen+1,prer,k+1,inr);
        cout<<root;
        return root;
    }
    
    int main()
    {
        while(cin>>pre>>in)
        {
            for(int i=0;i<in.size();i++) pos[in[i]]=i;
            build(0,pre.size()-1,0,in.size()-1);
            cout<<endl;
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    【转载】SG定理
    P3235 [HNOI2014]江南乐(Multi-Nim)
    斐波那契数列
    WC2021游记
    线性基性质证明和应用
    「NOI2018」屠龙勇士
    XiaoMi Interview Log
    打靶训练
    八皇后问题
    Docker的一些常用
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14323606.html
Copyright © 2020-2023  润新知