根据二叉树的前中后序列恢复二叉树的结构
char* VLR="ABCDEFGH";
char* LVR="CBEDFAGH";
char* LRV="CEFDBHGA";
int n=strlen(VLR);
1.根据前序和中序恢复二叉树:
void create1(PNODE p,char*VLR,char*LVR,int len)
{
if(len!=0)
{
int k=0;
while(VLR[0]!=LVR[k])
{
k++;
}
p=(PNODE)malloc(sizeof(NODE));
p->data=VLR[0];
create1(p->lchild,VLR+1,LVR,k);
create1(p->rchild,VLR+k+1,LVR+k+1,len-k-1);
}
}
2.根据后序和中序恢复二叉树:
void create2(PNODE p,char*LRV,char*LVR,int len)
{
if(len!=0)
{
int k=0;
while(LRV[len-1]!=LVR[k])
{
k++;
}
p=(PNODE)malloc(sizeof(NODE));
p->data=LVR[k];
create2(p->lchild,LRV,LVR,k);
create2(p->rchild,LRV+k,LVR+k+1,len-k-1);
}
}
总结
- 主要是根据前序和后序对中序进行划分,找到根节点的位置。之后找到剩余的右子树和左子树在前中后序的范围进行递归。