#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree*T)
{
char ch;
scanf("%c",&ch);
if(ch == ' ')*T = NULL;
else{
if(!(*T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
(*T)->data = ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return OK;
}
Status Print(TElemType e)
{
printf("%c",e);
return OK;
}
Status PreOrderTraverse(BiTree*T,Status(*visit)(TElemType e))
{
if(*T==NULL)return ERROR;
(*visit)((*T)->data);
PreOrderTraverse(&((*T)->lchild),visit);
PreOrderTraverse(&((*T)->rchild),visit);
return OK;
}
Status InOrderTraverse(BiTree*T,Status(*visit)(TElemType e))
{
if(*T==NULL)return ERROR;
InOrderTraverse(&((*T)->lchild),visit);
(*visit)((*T)->data);
InOrderTraverse(&((*T)->rchild),visit);
return OK;
}
Status PostOrderTraverse(BiTree*T,Status(*visit)(TElemType e))
{
if(*T==NULL)return ERROR;
PostOrderTraverse(&((*T)->lchild),visit);
PostOrderTraverse(&((*T)->rchild),visit);
(*visit)((*T)->data);
return OK;
}
int main()
{
BiTree bt = NULL;
CreateBiTree(&bt);
PreOrderTraverse(&bt,Print);
printf("\n");
InOrderTraverse(&bt,Print);
printf("\n");
PostOrderTraverse(&bt,Print);
return OK;
}
二叉树的实现
最新推荐文章于 2024-09-17 13:40:15 发布