zoukankan      html  css  js  c++  java
  • pat 甲级 1086(树的遍历||建树)

    思路1:可以用建树来做

    由于是先序遍历,所以直接先序建树就行了。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxn = 12000;
    int a[maxn],n,num;
    char str[20];
    void build(int id)
    {
        int x;
        if(num<=0) return ;
        scanf("%s",str);
        if(str[1]=='u')
        {
            scanf("%d",&x);
            a[id]=x;
            num--;
            build(id*2);
            build(id*2+1);
        }
        else num--;
    }
    void postorder(int x)
    {
        if(a[x]!=0)
        {
            postorder(x*2);
            postorder(x*2+1);
            if(num==0) printf("%d",a[x]),num=1;
            else printf(" %d",a[x]);
        }
    }
    int main(void)
    {
        int i;
        cin>>n;
        getchar();
        num=n*2;
        build(1);
        num=0;
        postorder(1);
        return 0;
    }
    View Code

    思路2:转换为前序中序遍历(参考柳神的博客)

    如果输入时不带堆栈就是前序遍历,带堆栈就是中序遍历,最后转换为后序遍历。

    #include<iostream>
    #include<vector>
    #include<cstdio>
    #include<stack>
    #include<cstring>
    using namespace std;
    const int maxn = 12000;
    vector <int> in,pre,num;
    char str[20];
    int n,pt=0;
    void f(int root,int st,int ed)
    {
        if(st>ed) return ;
        int i;
        for(i=st;i<=ed;i++) if(pre[root]==in[i]) break;
        f(root+1,st,i-1);
        f(root+(i-st)+1,i+1,ed);
        if(pt==0) printf("%d",num[pre[root]]),pt=1;
        else printf(" %d",num[pre[root]]);
    }
    int main(void)
    {
        int i,x,id=0;
        stack <int> st;
        cin>>n;
        for(i=0;i<n*2;i++)
        {
            scanf("%s",str);
            if(str[1]=='u')
            {
                scanf("%d",&x);
                num.push_back(x);
                pre.push_back(id);
                st.push(id++);
            }
            else
            {
                in.push_back(st.top());
                st.pop();
            }
        }
        f(0,0,n-1);
        return 0;
    }
    View Code
  • 相关阅读:
    MHA
    主从复制
    模拟数据误删除并恢复
    mysql日志类型和备份mysqldump2
    springcloud-Hystrix图形化Dashboard搭建
    springcloud-Hystrix工作流程
    springcloud-Hystrix-服务熔断使用
    springcloud-Hystrix-服务熔断理论
    springcloud-Hystrix-降级fallback完善
    springcloud-Hystrix-降级fallback
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10079680.html
Copyright © 2011-2022 走看看