前序和中序转换成二叉树

#include<iostream>
#include<iomanip>
#include<list>
#include<cmath>
#include<vector>
#include<assert.h>
#include"Test.h"
using namespace std;
struct Node
{
    int data;
    Node *left;
    Node *right;
};
int pre[]={1,2,4,7,3,5,6,8};
int mid[]={4,7,2,1,5,3,8,6};

Node *f(int pre[],int a,int b,int mid[],int m,int n)
{
    if(b-a+1!=n-m+1)
        throw std::exception("Invalid input!");
    if(a>b||m>n)
        return NULL;
    int i;
    Node *p=NULL;
    for(i=m;i<=n;i++)
    {
        if(mid[i]==pre[a])
        {
            p=new Node();
            p->data=mid[i];
            p->left=f(pre,a+1,a+i-m,mid,m,i-1);
            p->right=f(pre,a+i-m+1,b,mid,i+1,n);
            return p;
        }
    }
    throw std::exception("Invalid input!");
}
Node *Construct(int pre[],int m,int mid[],int n)
{
    if(pre==NULL||mid==NULL||m!=n||m<0)
        throw std::exception("Invalid Input");
    return f(pre,0,m-1,mid,0,n-1);
}

Node *t;
void main()
{ 
    try
    {
        t=Construct(pre,8,mid,8);
    }
    catch(std::exception e)
    {
        cout<<e.what()<<endl;
    }
    int a;

    system("pause");
}
原文地址:https://www.cnblogs.com/dyc0113/p/3207629.html