#include <iostream>
#include <string.h>
using namespace std;
struct Node
{
char data;
Node *left;
Node *right;
Node(char d = char()):data(d),left(NULL),right(NULL) {}
};
class myTree
{
private:
void prePrintf(Node *p)
{
if(p!=NULL)
{
cout<<p->data<<"\t";
prePrintf(p->left);
prePrintf(p->right);
}
}
void Init(Node *&p,const char *&s1,const char *s2,int n)
{
//根据二叉树的前序跟后续构造二叉树.
int i = 0;
if(*s1=='\0') return;
for(; i<=n; i++)
{
if(*s1==s2[i])
{
break;
}
}
if(i>n) return;
p = new Node(*s1);
Init(p->left,++s1,s2,i-1);
Init(p->right,s1,s2+i+1,n-i);
}
Node *root;
public:
myTree()
{
root = NULL;
}
void Init(const char *s1,const char *s2)
{
int n = strlen(s1);
Init(root,s1,s2,n);
}
void Printf()
{
prePrintf(root);
}
};
int main()
{
myTree mt;
char *s1 = new char[7];
char *s2 = new char[7];
strcpy(s1,"ABCDEFG");
strcpy(s2,"CBDAFEG");
mt.Init(s1,s2);
mt.Printf();
return 0;
}
#include <string.h>
using namespace std;
struct Node
{
char data;
Node *left;
Node *right;
Node(char d = char()):data(d),left(NULL),right(NULL) {}
};
class myTree
{
private:
void prePrintf(Node *p)
{
if(p!=NULL)
{
cout<<p->data<<"\t";
prePrintf(p->left);
prePrintf(p->right);
}
}
void Init(Node *&p,const char *&s1,const char *s2,int n)
{
//根据二叉树的前序跟后续构造二叉树.
int i = 0;
if(*s1=='\0') return;
for(; i<=n; i++)
{
if(*s1==s2[i])
{
break;
}
}
if(i>n) return;
p = new Node(*s1);
Init(p->left,++s1,s2,i-1);
Init(p->right,s1,s2+i+1,n-i);
}
Node *root;
public:
myTree()
{
root = NULL;
}
void Init(const char *s1,const char *s2)
{
int n = strlen(s1);
Init(root,s1,s2,n);
}
void Printf()
{
prePrintf(root);
}
};
int main()
{
myTree mt;
char *s1 = new char[7];
char *s2 = new char[7];
strcpy(s1,"ABCDEFG");
strcpy(s2,"CBDAFEG");
mt.Init(s1,s2);
mt.Printf();
return 0;
}