已知先序序列和中序序列建树:
#include <iostream>
#include <cstring>
using namespace std;
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTNode;
void Create(BTNode *&T, char *pre, char *in, int n)
{
if(n <= 0)
{
T = NULL;
return;
}
else
{
T = new BTNode;
T->data = *pre;
int k;
for(int i = 0;i < n;i++)
{
if(*pre == *(in+i))
{
k = i;
break;
}
}
Create(T->lchild, pre+1, in, k);
Create(T->rchild, pre+k+1, in+k+1, n-k-1);
}
}
void Pre(BTNode *T)
{
if(T == NULL) return;
Pre(T->lchild);
Pre(T->rchild);
cout<<T->data;
}
int main()
{
BTNode *T;
char pre[20], in[20];
cin>>pre>>in;
Create(T, pre, in, strlen(pre));
Pre(T);
return 0;
}
已知后序序列和中序序列建树:
#include <iostream>
#include <cstring>
using namespace std;
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTNode;
void Create(BTNode *&T, char *pos, char *in, int n)
{
if(n <= 0)
{
T = NULL;
return;
}
else
{
T = new BTNode;
T->data = *(pos+n-1);
int k;
for(int i = 0;i < n;i++)
{
if(*(pos+n-1) == *(in+i))
{
k = i;
break;
}
}
Create(T->lchild, pos, in, k);
Create(T->rchild, pos+k, in+k+1, n-k-1);
}
}
void Pre(BTNode *T)
{
if(T)
{
cout<<T->data;
Pre(T->lchild);
Pre(T->rchild);
}
}
int main()
{
BTNode *T;
char pos[20], in[20];
cin>>pos>>in;
Create(T, pos, in, strlen(pos));
Pre(T);
return 0;
}