#define CHAR
#include "ds.h"
#ifdef CHAR
typedef char TElemType;
TElemType Nil=' ';
#endif
#ifdef INT
typedef int TElemType;
TElemType Nil=0;
#endif
#include "binaryTree.h"
#include "binaryTree.c"
int main(){
BiTree T, p, c;
InitBiTree(&T);
CreateBiTree(&T);
PreOrderTraverse(T, visit);
return OK;
}
Status visit(TElemType e){
#ifdef CHAR
printf("%c ", e);
#endif
#ifdef INT
printf("%d ", e);
#endif
return OK;
}
Status InitBiTree(BiTree *T){
*T = NULL;
return OK;
}
Status CreateBiTree(BiTree *T){
TElemType data;
#ifdef CHAR
scanf("%c", &data);
#endif
#ifdef INT
scanf("%d", &data);
#endif
if(data == Nil)
*T = NULL;
else{
*T = (BiTree)malloc(sizeof(BiTNode));
if(!*T)
exit(OVERFLOW);
(*T)->data = data;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
return OK;
}
void DestroyBiTree(BiTree *T){
if(*T){
if((*T)->lchild)
DestroyBiTree(&(*T)->lchild);
if((*T)->rchild)
DestroyBiTree(&(*T)->rchild);
free(*T);
*T = NULL;
}
}
void PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){
if(T){
Visit(T->data);
PreOrderTraverse(T->lchild, Visit);
PreOrderTraverse(T->rchild, Visit);
}
}
void InOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){
if(T){
InOrderTraverse(T->lchild, Visit);
Visit(T->data);
InOrderTraverse(T->rchild, Visit);
}
}
int BiTreeDepth(BiTree T){
int i, j;
if(!T)
return 0;
if(T->lchild)
i = BiTreeDepth(T->lchild);
else
i = 0;
if(T->rchild)
j = BiTreeDepth(T->rchild);
else
j = 0;
return i > j?i + 1: j + 1;
}
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
Status InitBiTree(BiTree *T);
Status CreateBiTree(BiTree *T);
TElemType LeftChild(BiTree T, TElemType e);
void PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e));
void InOrderTraverse(BiTree T, Status(*Visit)(TElemType e));
int BiTreeDepth(BiTree T);
#include <string.h>
#include <ctype.h>
#include <sys/malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW 0
typedef int Status;
typedef int Boolean;