前中序遍历建树,并输出层次遍历

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef struct BinTree
{
    int data;
    BinTree* lchild;
    BinTree* rchild;
}BinTree;
vector<int> result;
void RebuildTree(BinTree* &Tree,int *pre,int *in,int len)
{
    Tree=new BinTree;
    if(len==0)
    {
        delete Tree;
        Tree=NULL;
        return;
    }
    int index=0;
    while(*(pre)!=*(in+index)) index++;
    Tree->data=*(pre);
    RebuildTree(Tree->lchild,pre+1,in,index);
    RebuildTree(Tree->rchild,pre+1+index,in+1+index,len-(index+1));
}
void search(BinTree* Tree)
{
    if(Tree==NULL) return;
    queue<BinTree*> que;
    que.push(Tree);
    while(!que.empty())
    {
        BinTree* cur=que.front();
        que.pop();
        result.push_back(cur->data);
        if(cur->rchild!=NULL) que.push(cur->rchild);
        if(cur->lchild!=NULL) que.push(cur->lchild);
    }
}
int main()
{
    int pre[101];
    int in[101];
    int length;
    while(cin>>length)
    {
        result.clear();
        for(int i=0;i<length;i++) cin>>pre[i];
        for(int i=0;i<length;i++) cin>>in[i];
        BinTree* tree;
        RebuildTree(tree,pre,in,length);
        search(tree);
        for(int i=0;i<result.size()-1;i++) cout<<result[i]<<" ";
        cout<<result[result.size()-1]<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40634175/article/details/88767869