#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int CreateBiTree(BiTree *T);
Status Visit(int e);
Status PreOrderTraverse(BiTree T);
Status MidOrderTraverse(BiTree T);
Status BacOrderTraverse(BiTree T);
int main()
{
BiTree *T;
T=(BiTree*)malloc(sizeof(BiTree));
CreateBiTree(T);
printf("\n前序遍历结果:");
PreOrderTraverse(*T);
printf("\n中序遍历结果:");
MidOrderTraverse(*T);
printf("\n后序遍历结果:");
BacOrderTraverse(*T);
return 0;
}
int CreateBiTree(BiTree *T)
{
printf("please input the node data:");
int ch;
scanf("%d",&ch);
BiTree p;
p=(BiTree)malloc(sizeof(BiTNode));
p->data=ch;
*T=p;
char c;
fflush(stdin);
printf("Dose %d has left child(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->lchild);
else
(*T)->lchild=NULL;
fflush(stdin);
printf("Dose %d has right child(y--yes,n--no):",ch);
scanf("%c",&c);
if(c=='y')
CreateBiTree(&(*T)->rchild);
else
(*T)->rchild=NULL;
return 0;
}
Status Visit(int e)
{
printf("%d ",e);
return OK;
}
Status PreOrderTraverse(BiTree T)
{
if(T)
{
if(Visit(T->data))
if(PreOrderTraverse(T->lchild))
if(PreOrderTraverse(T->rchild))
return OK;
return ERROR;
}
else
return OK;
}
Status MidOrderTraverse(BiTree T)
{
if(T)
{
if(MidOrderTraverse(T->lchild))
if(Visit(T->data))
if(MidOrderTraverse(T->rchild))
return OK;
return ERROR;
}
else
return OK;
}
Status BacOrderTraverse(BiTree T)
{
if(T)
{
if(BacOrderTraverse(T->lchild))
if(BacOrderTraverse(T->rchild))
if(Visit(T->data))
return OK;
return ERROR;
}
else
return OK;
}
二叉树创建、前序遍历、中序遍历和后序遍历
最新推荐文章于 2022-07-17 23:57:36 发布