#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int status;
typedef struct BiTNode
{
char Data;
struct BiTNode* lChild,* rChild;
}
BiTNode,*BiTree;
status CreateTree(BiTree &T)
{/*先序序列:abd##e##cf##g##*/
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else
{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
{
exit(OVERFLOW);
}
T->Data=ch;//生成根节点
CreateTree(T->lChild); //构造左子树链表
CreateTree(T->rChild); //构造右子树链表
}
return OK;
}
void PreOrderTraval(BiTree T,status(*Visit)(char e))
{
if(T)
{
Visit(T->Data);
PreOrderTraval(T->lChild,Visit);
PreOrderTraval(T->rChild,Visit);
}
}
void InOrderTraval(BiTree T,status(*Visit)(char e))
{
if(T)
{
InOrderTraval(T->lChild,Visit);
Visit(T->Data);
InOrderTraval(T->rChild,Visit);
}
}
void PostOrderTraval(BiTree T,status(*Visit)(char e))
{
if(T)
{
PostOrderTraval(T->lChild,Visit);
PostOrderTraval(T->rChild,Visit);
Visit(T->Data);
}
}
status Visit(char Data)
{
printf("%c",Data);
return OK;
}
status Display(BiTree T,int Level)
{
int i;
if(T==NULL) return 0;
Display(T->lChild,Level+1);
for(i=0;i<Level-1;i++)
printf(" ");
if(Level>=1) printf("---");
printf("%c\n",T->Data);
Display(T->rChild,Level+1);
return OK;
}
void ShowLeaves(BiTree T)
{
if(T)
{
if(T->lChild==NULL&&T->rChild==NULL)
Visit(T->Data);
ShowLeaves(T->lChild);
ShowLeaves(T->rChild);
}
}
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int status;
typedef struct BiTNode
{
char Data;
struct BiTNode* lChild,* rChild;
}
BiTNode,*BiTree;
status CreateTree(BiTree &T)
{/*先序序列:abd##e##cf##g##*/
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else
{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
{
exit(OVERFLOW);
}
T->Data=ch;//生成根节点
CreateTree(T->lChild); //构造左子树链表
CreateTree(T->rChild); //构造右子树链表
}
return OK;
}
void PreOrderTraval(BiTree T,status(*Visit)(char e))
{
if(T)
{
Visit(T->Data);
PreOrderTraval(T->lChild,Visit);
PreOrderTraval(T->rChild,Visit);
}
}
void InOrderTraval(BiTree T,status(*Visit)(char e))
{
if(T)
{
InOrderTraval(T->lChild,Visit);
Visit(T->Data);
InOrderTraval(T->rChild,Visit);
}
}
void PostOrderTraval(BiTree T,status(*Visit)(char e))
{
if(T)
{
PostOrderTraval(T->lChild,Visit);
PostOrderTraval(T->rChild,Visit);
Visit(T->Data);
}
}
status Visit(char Data)
{
printf("%c",Data);
return OK;
}
status Display(BiTree T,int Level)
{
int i;
if(T==NULL) return 0;
Display(T->lChild,Level+1);
for(i=0;i<Level-1;i++)
printf(" ");
if(Level>=1) printf("---");
printf("%c\n",T->Data);
Display(T->rChild,Level+1);
return OK;
}
void ShowLeaves(BiTree T)
{
if(T)
{
if(T->lChild==NULL&&T->rChild==NULL)
Visit(T->Data);
ShowLeaves(T->lChild);
ShowLeaves(T->rChild);
}
}