中序加后序建立二叉树


#include

#include

#include

#include

#include

#include

using namespace std;


typedef struct Node{

    int Data;

    struct Node *Left, *Right;

    

}Node, *BinTree;


BinTree Create(int *post, int *in, int n){

    if(n<=0)    return NULL;

    

    BinTree T;

    T=new Node;

    T->Data=post[n-1];

    

    int i;

    for(i=0;i

        if(in[i]==post[n-1]) break;

    }

    

    T->Left=Create(post, in, i);

    T->Right=Create(post+i,in+i+1,n-1-i);

    return T;

}


void LevelTraverse(BinTree T){

    queue<BinTree> q;

    BinTree BT;

    int flag=1;

    if(T!=NULL) q.push(T);

    while(!q.empty()){

        BT=q.front();

        q.pop();

        if(flag==1) {

            flag=0;

        }

        else cout<<" ";

        cout<Data;

        if(BT->Left!=NULL) q.push(BT->Left);

        if(BT->Right!=NULL) q.push(BT->Right);

    }

        

    

}


int main(){

    int i,n;

    int post[35],in[35];

    cin>>n;

    

    for(i=0;i

        cin>>post[i];

    }

    for(i=0;i

        cin>>in[i];

    }

    

    BinTree T=NULL;

    T=Create(post,in,n);

    

    LevelTraverse(T);

    cout<<endl;

    return 0;

}


你可能感兴趣的:(中序加后序建立二叉树)