#include<iostream>
#include<stdio.h>
using namespace std;
class btree
{
public:
int value;
btree *lchild;
btree *rchild;
};
int in[65540];
int post[65540];
btree * created(int in_b,int in_e,int post_b,int post_e)
{
btree * root=new btree;
root->value = post[post_e];
root->lchild = NULL;
root->rchild = NULL;
if(in_b == in_e)
return root;
int root_value = post[post_e];
int index;
int temp=in_b;
while(true)
{
if(in[temp]==root_value)
{
break;
}
temp++;
}
index = temp - in_b;
if(index>=1)
root->lchild = created(in_b,in_b+index-1,post_b,post_b+index-1);
if(in_e>=in_b+index+1)
root->rchild = created(in_b+index+1,in_e,post_b+index,post_e-1);
return root;
}
void pre_p(btree * root)
{
if(root==NULL)
return ;
cout<<root->value<<" ";
pre_p(root->lchild);
pre_p(root->rchild);
}
void deletetree(btree *root)
{
if (root != NULL) {
delete(root->lchild);
delete(root->rchild);
delete root;
root = NULL;
}
}
void preorder(btree *root,int vnum,int &count)
{
if(root!=NULL)
{
cout<<root->value;
if(count<vnum-1)
{
cout<<" ";
count++;
preorder(root->lchild,vnum,count);
preorder(root->rchild,vnum,count);
}
else
cout<<endl;
}
}
int main()
{
int i=0;
char c;
while(cin>>in[i++])
{
if(cin.get()!=' ')
break;
}
i=0;
while(cin>>post[i++])
{
if(cin.get()!=' ')
break;
}
btree * root=NULL;
root = created(0,i-1,0,i-1);
int count=0;
preorder(root,i,count);
deletetree(root);
return 0;
}
根据中序和后序还原二叉树(数组)
最新推荐文章于 2022-02-25 10:35:48 发布