算法笔记--分治(求后序遍历)

来源:互联网 发布:数据安全防护功能 编辑:程序博客网 时间:2024/05/18 06:41

由前序遍历和中序遍历求后序遍历

Sample Input
9
1 2 4 7 3 5 8 9 6
4 7 2 1 8 5 9 3 6

Sample Output
7 4 2 8 9 5 6 3 1

#include<cstdio>int qian[1005],zhong[1005];void ecs(int a,int b,int n,int flag)  //在前序是第几个,在中序是第几个,几个元素,是否第一棵树{    if(n==1)    //叶节点    {        printf("%d ",qian[a]);        return;    }    else if(n<=0)  return; //如果不存在左子树或右子树就返回上一层    int i;    for(i=0;qian[a]!=zhong[b+i];i++);  //遍历左子树的数目    ecs(a+1,b,i,0);             //左子树    ecs(a+1+i,b+i+1,n-i-1,0);   //右子树    if(flag==1)//最原始的跟节点        printf("%d",qian[a]);    else//一般的根节点        printf("%d ",qian[a]);}int main(){    int n,i;    while(scanf("%d",&n)==1)    {        for(i=1;i<=n;i++) scanf("%d",&qian[i]);        for(i=1;i<=n;i++) scanf("%d",&zhong[i]);        ecs(1,1,n,1);        printf("\n");    }    return 0;}
原创粉丝点击