数据结构----由中序遍历和后序遍历推导前序遍历;

7-17 根据后序和中序遍历输出先序遍历 (25 分)

#include<bits/stdc++.h>
using namespace std;
int prearray[35],midarray[35],postarray[35];
void solvefunc(int pre,int mid,int post,int n)//pre是先序的第一个点,mid,post同理,n是这个根下(包括根)的元素数量;
{    if (n==0) return;
    if (n==1) prearray[pre]=postarray[post];
    int root=postarray[post+n-1],i;
    prearray[pre]=root;
    for (i=0;i<n;i++)
        if (midarray[mid+i]==root) break;
    int L=i,R=n-i-1;//求左右树的元素个数;
    solvefunc(pre+1,mid,post,L);//递归左子树求,
    solvefunc(pre+L+1,mid+L+1,post+L,R);//递归右子树求,均要注意传入参数写法;
}
int main()
{
    int n;
    cin>>n; 
    for (int i=0;i<n;i++)
        cin>>postarray[i];
    for (int i=0;i<n;i++)
        cin>>midarray[i];
    solvefunc(0,0,0,n);
    cout<<"Preorder:"<<" ";
    for (int i=0;i<n;i++)
        cout<<prearray[i]<<" ";
    return 0;
}

 

posted @ 2022-02-12 22:03  次林梦叶  阅读(72)  评论(0)    收藏  举报