码迷,mamicode.com
首页 > 其他好文 > 详细

后序和中序建立二叉树或者先序和中序建立二叉树

时间:2014-11-22 13:24:52      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   os   sp   数据   bs   代码   ef   

代码实现

#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct node
{
  char data;//节点数据元素
  struct node *lchild;//指向左孩子
  struct node *rchild;//指向右孩子
}BiNode,*BTree;
void GetPreOrder(char *last,char *mid,BTree &T,int len)
{//利用后序和中序建立二叉树
printf("%c %c %d\n",*last,*mid,len);
if(len==0)
{
T = NULL;
return;
} //取出后序序列中的最后一个节点
char ch=last[len-1];
int index=0;  //在中序序列中进行查找根节点,并用index记录其在序列中的索引
while(mid[index]!=ch)
{
index++;

T=(BTree)malloc(sizeof(BiNode)); //给根节点分配空间
T->data=mid[index];  
GetPreOrder(last,mid,T->lchild,index);//建立左子树  
GetPreOrder(last+index,mid+index+1,T->rchild,len-index-1);//建立右子树
}
void GetPostOrder(char *prim,char *mid,BTree &T,int len)
{//利用先序和中序建立二叉树
if(len==0)
{
T=NULL;
return;
}  //提出先序序列中的第一个节点
char ch=prim[0];
int index=0;  //在中序序列中查找当前根节点,并用index记录其在序列中的位置
while(mid[index]!=ch)
{
index++;
}  //给根节点分配空间
T=(BTree)malloc(sizeof(BiNode));
T->data=mid[index];  //建立左子树
GetPostOrder(prim+1,mid,T->lchild,index);  //建立右子树
GetPostOrder(prim+index+1,mid+index+1,T->rchild,len-index-1);
}
void PreOrder(BTree T)
{//先序输出二叉树
if(T!=NULL)
{
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
  }
}
void PostOrder(BTree T)
{//后序输出二叉树
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
int main()
{
char first[26],mid[26],last[26];
while(scanf("%s%s",last,mid)!=EOF)
{
BTree T=NULL;
GetPreOrder(last,mid,T,strlen(last));
PreOrder(T);
printf("\n");
}
return 0;
}

后序和中序建立二叉树或者先序和中序建立二叉树

标签:style   io   ar   os   sp   数据   bs   代码   ef   

原文地址:http://blog.csdn.net/qq_16997551/article/details/41380599

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!