#include<iostream>
#include<string.h>
using namespace std;
struct Node
{
char data;
Node* left;
Node* right;
Node():left(NULL),right(NULL){}
Node(char x,Node* l=NULL,Node* r=NULL){data=x;}
};
class Tree
{
public:
Tree():root(NULL){}
~Tree(){Destroy(root);}
//广义表创建
//void createTree(createTree(root);)
void Destroy(Node* root);
void createBinTree_pre_in(const char *pre, const char *in)
{
int n = strlen(pre);
createTree_pre_in(root, pre, in, n);
}
void createTree_pre_in(Node*& cur,const char* pre,const char* in,int n);//先序&中序遍历
//先序遍历
void Pre_order(){pre_order(root);}
void pre_order(Node* root);
//后续遍历
void Post_order(){post_order(root);}
void post_order(Node* root);
private:
Node* root;
};
void Tree::createTree_pre_in(Node*& cur,const char* pre,const char* in,int n)
{
if (n <= 0)
{
cur = NULL;
return;
}
int k=0;
while(pre[0]!=in[k]){k++;}
cur=new Node(in[k]);
createTree_pre_in(cur->left,pre+1,in,k);
createTree_pre_in(cur->right,pre+k+1,in+k+1,n-k-1);
}
void Tree::pre_order(Node* root){
if (root != NULL)
{
cout << root->data << " ";
pre_order(root->left);
pre_order(root->right);
}
}
void Tree::post_order(Node* root){
if(root!=NULL){
post_order(root->left);
post_order(root->right);
cout<<root->data<<" ";
}
}
void Tree::Destroy(Node* root){
if(root==NULL)
return;
Destroy(root->left);
Destroy(root->right);
delete root;
}
int main()
{
char pre[]="12473568";
char in[]="47215386";
Tree T;
T.createBinTree_pre_in(pre,in);
T.Pre_order();
cout<<endl;
T.Post_order();
cout<<endl;
T.~Tree();
cout<<"destoried"<<endl;
}