//建立二叉树的二叉链表
#include <stdio.h>
#include <stdlib.h>
#define max 2000
typedef struct Node{
char elem;
struct Node *lchild,*rchild;
}Node,*PNode,*BiTree;
void PreInord(char *P,char *I,int i,int j,int k,int h,BiTree *T){
//先序遍历序列中从i到j,中序遍历从k到h,建立一课二叉树放在T中
int m;
(*T) = (BiTree)malloc(sizeof(Node));
(*T)->elem = P[i]; //先序遍历第一个节点为树根
m = k;
while(I[m] != P[i]) //在中序遍历中定位树根
m++;
//递归调用建立左子树
if(m == k) (*T)->lchild = NULL; //左子树为空
else PreInord(P,I,i+1,i+m-k,k,m-1,&((*T)->lchild));
//递归调用建立右子树
if(m == h) (*T)->rchild = NULL; //右子树为空
else PreInord(P,I,i+m-k+1,j,m+1,h,&((*T)->rchild));
}
void Postord(BiTree T){
if(T != NULL)
{
Postord(T->lchild);
Postord(T->rchild);
printf("%c",T->elem);
}
}
int main(){
char preord[max] = {'0'};
char inord[max] = {'0'};
int i = 0;
char c;
while(1)
{
c = getchar();
if(c == '\n')
break;
else
{
preord[i] = c;
i++;
}
}
i = 0;
while(1)
{
c = getchar();
if(c == '\n')
break;
else
{
inord[i] = c;
i++;
}
}
BiTree root;
PreInord(preord,inord,0,i-1,0,i-1,&root);
Postord(root);
printf("\n");
return 0;
}
noj18 建立二叉树的二叉链表
最新推荐文章于 2021-06-16 22:20:29 发布