zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    软件测试工具
    Linux笔记
    Google Test
    字典dict()
    元组tuple 可迭代对象
    列表list
    一些总结
    format()
    列表list
    format() expandtabs() 输入表格数据
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14323606.html
Copyright © 2011-2022 走看看