#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
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 PreOrderTraverse(BiTree T, Status (*Visit)(TElemType e)){
if (T){
Visit(T->data);
PreOrderTraverse(T->lchild, Visit);
PreOrderTraverse(T->rchild, Visit);
}
return OK;
}
Status InOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){
if (T){
InOrderTraverse(T->lchild, Visit);
Visit(T->data);
InOrderTraverse(T->rchild, Visit);
}
return OK;
}
Status PostOrderTraverse (BiTree T, Status (* Visit)(TElemType e)){
if (T){
PostOrderTraverse(T->lchild, Visit);
PostOrderTraverse(T->rchild, Visit);
Visit(T->data);
}
return OK;
}
Status Visit(TElemType e){
printf("%c ", e);
return OK;
}
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:++j;
}
int Leaf(BiTree T){
int n,m;
if (T==NULL)
return 0;
else if ((T->lchild == NULL) && (T->rchild == NULL))
return 1;
else{
n = Leaf (T->lchild);
m = Leaf (T->rchild);
return n+m;
}
}
int main(){
BiTree T;
printf("请手动创建二叉树\n\t");
CreateBiTree(T);
printf("\n二叉树创建成功!\n");
printf("\n\n\n二叉树深度\n");
printf("%d\n",BiTreeDepth(T));
printf("\n\n\n叶子结点个数\n");
printf("%d\n",Leaf(T));
printf("\n\n\n先序遍历\n");
PreOrderTraverse(T, Visit);
printf("\n\n\n中序遍历\n");
InOrderTraverse(T, Visit);
printf("\n\n\n后序遍历\n");
PostOrderTraverse(T, Visit);
printf("\n\n\n\n");
system("pause");
return 0;
}
|