#include "stdafx.h"
#include "malloc.h"
typedef int Status;
typedef char TElemType;
#define OVERFLOW -2
#define OK 1
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status GreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
getchar();
if(ch==' ')T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return OVERFLOW;
T->data=ch;
GreateBiTree(T->lchild);
GreateBiTree(T->rchild);
}
return OK;
}
void PreOrderTraverse(BiTree T){
if(T){
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
}
int depth(BiTree T){
int dep1,dep2;
if(T==NULL)
return 0;
else
{
dep1=depth(T->lchild);
dep2=depth(T->rchild);
if(dep1>dep2)
return dep1+1;
else
return dep2+1;
}
}
int CountLeaf(BiTree T){
int m,n;
if(T==NULL) return 0;
if((T->lchild==NULL)&&(T->rchild==NULL))
return 1;
else{
m=CountLeaf(T->lchild);
n=CountLeaf(T->rchild);
return (m+n);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
BiTree T;
GreateBiTree(T);
printf("OK\n");
PreOrderTraverse(T);
int d;
d=depth(T);
printf("%d",d);
printf("\n");
d=CountLeaf(T);
printf("%d",d);
printf("\n");
return 0;
}
#include "malloc.h"
typedef int Status;
typedef char TElemType;
#define OVERFLOW -2
#define OK 1
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status GreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
getchar();
if(ch==' ')T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return OVERFLOW;
T->data=ch;
GreateBiTree(T->lchild);
GreateBiTree(T->rchild);
}
return OK;
}
void PreOrderTraverse(BiTree T){
if(T){
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
}
int depth(BiTree T){
int dep1,dep2;
if(T==NULL)
return 0;
else
{
dep1=depth(T->lchild);
dep2=depth(T->rchild);
if(dep1>dep2)
return dep1+1;
else
return dep2+1;
}
}
int CountLeaf(BiTree T){
int m,n;
if(T==NULL) return 0;
if((T->lchild==NULL)&&(T->rchild==NULL))
return 1;
else{
m=CountLeaf(T->lchild);
n=CountLeaf(T->rchild);
return (m+n);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
BiTree T;
GreateBiTree(T);
printf("OK\n");
PreOrderTraverse(T);
int d;
d=depth(T);
printf("%d",d);
printf("\n");
d=CountLeaf(T);
printf("%d",d);
printf("\n");
return 0;
}