#include "stdio.h"
#include "malloc.h"
/**
* 根据前序pre[n],中序pin[n]序列 建立二叉树, n为结点数
*/
typedef struct TNode{
char c;
struct TNode *lchild,*rchild;
}TNode,Tree;
Tree *createTree(char pre[],char pin[],int p1,int p2,int in1,int in2){
//递归实现根据前序pre,中序pin序列建立二叉树
// p1,p2分别为前序序列头尾下标,in1,in2分别为中序序列头尾下标
if(p1<=p2){
TNode *tree=(TNode *)malloc(sizeof(TNode));
tree->c=pre[p1];//前序序列第一个元素
tree->lchild=tree->rchild=NULL;
int i;
for(i=in1;i<=in2&&pin[i]!=pre[p1];i++);//找到前序序列第一个元素在中序序列中的位置
//计算 左右子树高度
int lh,rh;
lh=i-in1;
rh=in2-i;
if(lh==0){
tree->lchild=NULL;
}else{
tree->lchild=createTree(pre,pin,p1+1,p1+lh,in1,in1+lh-1);//递归建立左子树
}
if(rh==0){
tree->rchild=NULL;
}else{
tree->rchild=createTree(pre,pin,p2-rh+1,p2,in2-rh+1,in2);//递归建立右子树
}
}
}
//前序遍历
void printPre(Tree *t){
if(t){
printf("%c ",t->c) ;
printPre(t->lchild);
printPre(t->rchild);
}
}
//中序遍历
void printIn(Tree *t){
if(t){
printIn(t->lchild);
printf("%c ",t->c);
printIn(t->rchild);
}
}
int main() {
char pre[]="ABDECF";
char pin[]="DBEACF";
Tree *t=createTree(pre,pin,0,5,0,5);
printPre(t);
printf("\n");
printIn(t);
}
前序,中序序列建立二叉树
最新推荐文章于 2022-12-08 21:55:34 发布