二叉树实现源代码如下:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
#include conio.h(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
#include stdio.h
#include stdlib.h
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
typedef int status;
typedef struct BiNode
{
char Data;
struct BiNode* lChild;
struct BiNode* rChild;
}BiNode,*pBiNode;
status CreateTree(BiNode** pTree);
status PreOrderTraval(BiNode* pTree);
status Visit(char Data);
status Display(BiNode* pTree,int Level);
status Clear(BiNode* pTree);
BiNode *pRoot=NULL;
main()
{
clrscr();
CreateTree(&pRoot);
printf("nPreOrder:");
PreOrderTraval(pRoot);
printf("n");
printf("nInOrder:");
InOrderTraval(pRoot);
printf("n");
printf("nPostOrder:");
PostOrderTraval(pRoot);
printf("n");
printf("nShowLeaves:");
ShowLeaves(pRoot);
printf("n-----------------------n");
printf("n");
Display(pRoot,0);
printf("n");
printf("nDeleting Tree:n");
DelTree(pRoot);
printf("BiTree Deleted.");
getch();
}
status CreateTree(BiNode** pTree) /*Input Example: abd##e##cf##g##*/
{
char ch;
scanf("%c",&ch);
if(ch==‘#‘)
{
(*pTree)=NULL;
}
else
{
if(!((*pTree)=(BiNode*)malloc(sizeof(BiNode))))
{
exit(OVERFLOW);
}
(*pTree)-Data=ch;
CreateTree(&((*pTree)-lChild));
CreateTree(&((*pTree)-rChild));
}
return OK;
}
status PreOrderTraval(BiNode* pTree)
{
if(pTree)
{
if(Visit(pTree-Data))
{
if(PreOrderTraval(pTree-lChild))
{
if(PreOrderTraval(pTree-rChild))
{
return OK;
}
}
}
return ERROR;
}
else
{
return OK;
}
}
status InOrderTraval(BiNode* pTree)
{
if(pTree)
{
if(InOrderTraval(pTree-lChild))
{
if(Visit(pTree-Data))
{
if(InOrderTraval(pTree-rChild))
{
return OK;
}
}
return ERROR;
}
return ERROR;
}
else
{
return OK;
}
}
status PostOrderTraval(BiNode* pTree)
{
if(pTree)
{
if(PostOrderTraval(pTree-lChild))
{
if(PostOrderTraval(pTree-rChild))
{
if(Visit(pTree-Data))
{
return OK;
}
return ERROR;
}
}
return ERROR;
}
else
{
return OK;
}
}
status Visit(char Data)
{
printf("%c",Data);
return OK;
}
status Display(BiNode* pTree,int Level)
{
int i;
if(pTree==NULL) return;
Display(pTree-lChild,Level+1);
for(i=0;iLevel-1;i++)
{
printf(" ");
}
if(Level=1)
{
printf("--");
}
printf("%cn",pTree-Data);
Display(pTree-rChild,Level+1);
}
status ShowLeaves(BiNode* pTree)
{
if(pTree)
{
if(ShowLeaves(pTree-lChild))
{
if(ShowLeaves(pTree-rChild))
{
if((pTree-lChild==NULL)&&(pTree-rChild==NULL))
{
if(!Visit(pTree-Data))
{
return ERROR;
}
}
return OK;
}
}
return ERROR;
}
else
{
return OK;
}
}
status DelTree(BiNode* pTree)
{
if(pTree)
{
if(DelTree(pTree-lChild))
{
if(DelTree(pTree-rChild))
{
printf("Deleting %cn",pTree-Data);
free((void*)pTree);
return OK;
}
}
return ERROR;
}
else
{
return OK;
}
}