#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#define SIZE 100
typedef char TElemType;
#define FALSE -1
#define MAX_SIZE 128
typedef struct BiTNode{
TElemType data;
struct BiTNode *LChild,*RChild;
}BiTNode,*BiTree;
typedef BiTree Status;
Status CreateBiTree_DLR(char pre[],char in[],int number){
if(!number)return 0;
int i=0;
while(i<number && in[i]!=pre[0])i++;
int Lnumber=i;
int Rnumber=number-i-1;
BiTNode *T=(BiTNode *)malloc(sizeof(BiTNode)) ;
T->data=pre[0];
T->LChild=CreateBiTree_DLR(&pre[1],&in[0],Lnumber);
T->RChild=CreateBiTree_DLR(&pre[Lnumber+1],&in[Lnumber+1],Rnumber);
return T;
}
typedef struct Queue {
int front;
int rear;
BiTNode* data[MAX_SIZE];
} SqQueue;
bool emptyQueue(SqQueue* q) {
if (q->front == q->rear) {
return true;
}
return false;
}
bool enQueue(SqQueue* q, BiTNode* node) {
if (q->rear == MAX_SIZE - 1) {
return false;
}
q->rear++;
q->data[q->rear] = node;
return true;
}
bool deQueue(SqQueue* q, BiTNode** node) {
if (q->front == q->rear) {
return false;
}
q->front++;
*node = q->data[q->front];
return true;
}
void initQueue(SqQueue** q) {
if (!((*q) = (SqQueue*)malloc(sizeof(SqQueue)))) {
printf("内存分配失败!");
exit(-1);
}
(*q)->front = (*q)->rear = -1;
}
void levelOrder(BiTNode* BT) {
SqQueue* q;
initQueue(&q);
if (BT != NULL) {
enQueue(q, BT);
}
while (!emptyQueue(q)) {
deQueue(q, &BT);
printf("%c", BT->data);
if (BT->LChild != NULL) {
enQueue(q, BT->LChild);
}
if (BT->RChild != NULL) {
enQueue(q, BT->RChild);
}
}
}
int main () {
char preorder_char[SIZE],inorder_char[SIZE];
printf("DLR:");gets(preorder_char);
printf("LDR:");gets(inorder_char);
BiTNode *C;
C=CreateBiTree_DLR(preorder_char, inorder_char, strlen(preorder_char));
printf("LevelOrder:");
levelOrder(C);
printf("\n");
system("pause");
}