HDU 1710 Binary Tree Traversals(二叉树)

来源:互联网 发布:ctp数据 编辑:程序博客网 时间:2024/05/17 22:55

题目链接:HDU 1710(点击进入)
直接贴代码:

//time:2016/8/4 #include<iostream>using namespace std;void build_tree(int n,int *a,int *b,int *c){    int *p=b;    if(n<=0)    return;    else    while(1){        if(a[0]==*p)        break;        else        p++;    }    //关键代码,和二叉树后序遍历思维差不多,可以在脑中想想     //后面两段代码不断将二叉树切割成左右子树    //当一个节点没有左右子树时读取它(可获得后序遍历序列,因为先读取左子树->右子树)    //读完后递归返回上一层(某以子树根节点),并读取它     int tt=p-b;//某一子树的左子树节点数     build_tree(tt,a+1,b,c);//左子树     build_tree(n-tt-1,a+tt+1,b+tt+1,c+tt);//右子树,至于c+tt参数为:在本层递归调用的子树中,一共有n个节点,其中tt个节点为左子树,需要占用前tt个空间保存     c[n-1]=a[0];}int main(){    int a[1000],b[1000],c[1000];    int n,i,j;    while(scanf("%d",&n)!=EOF){        for(i=0;i<n;i++)        scanf("%d",&a[i]);        for(i=0;i<n;i++)        scanf("%d",&b[i]);        build_tree(n,a,b,c);        for(i=0;i<n-1;i++){            printf("%d",c[i]);            printf(" ");        }        printf("%d",c[i]);        printf("\n");    }} 
0 0
原创粉丝点击