码迷,mamicode.com
首页 > 其他好文 > 详细

pat 甲级 1086(树的遍历||建树)

时间:2018-12-06 22:25:54      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:pre   tac   分享   scan   nbsp   span   const   后序遍历   直接   

思路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

 

pat 甲级 1086(树的遍历||建树)

标签:pre   tac   分享   scan   nbsp   span   const   后序遍历   直接   

原文地址:https://www.cnblogs.com/2018zxy/p/10079680.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!