#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
typedef struct BiNode
{
int data;
struct BiNode *lchild;
struct BiNode *rchild;
}BiTNode;
{
int data;
struct BiNode *lchild;
struct BiNode *rchild;
}BiTNode;
int CreatBiTree (BiTNode **T)
{
int num;
scanf("%d", &num);
if(num == -1)
{
*T = NULL;
return 0;
}
else
{
*T = (BiTNode *)malloc(sizeof(BiTNode));
if(!*T)
{
printf("Error!\n");
return 0;
}
else
{
(*T)->data = num;
printf("Enter %d lchild:", num);
CreatBiTree(&(*T)->lchild);
printf("Enter %d rchild:", num);
CreatBiTree(&(*T)->rchild);
}
}
return 1;
}
{
int num;
scanf("%d", &num);
if(num == -1)
{
*T = NULL;
return 0;
}
else
{
*T = (BiTNode *)malloc(sizeof(BiTNode));
if(!*T)
{
printf("Error!\n");
return 0;
}
else
{
(*T)->data = num;
printf("Enter %d lchild:", num);
CreatBiTree(&(*T)->lchild);
printf("Enter %d rchild:", num);
CreatBiTree(&(*T)->rchild);
}
}
return 1;
}
void PreOrderTravese (BiTNode *T)
{
if(T == NULL)
{
return;
}
printf("%d\n", T->data);
PreOrderTravese(T->lchild);
PreOrderTravese(T->rchild);
}
{
if(T == NULL)
{
return;
}
printf("%d\n", T->data);
PreOrderTravese(T->lchild);
PreOrderTravese(T->rchild);
}
void InOrderTravese (BiTNode *T)
{
if(T == NULL)
{
return;
}
InOrderTravese(T->lchild);
printf("%d\n", T->data);
InOrderTravese(T->rchild);
}
{
if(T == NULL)
{
return;
}
InOrderTravese(T->lchild);
printf("%d\n", T->data);
InOrderTravese(T->rchild);
}
void PostOrderTravese (BiTNode *T)
{
if(T == NULL)
{
return;
}
PostOrderTravese(T->lchild);
PostOrderTravese(T->rchild);
printf("%d\n", T->data);
}
{
if(T == NULL)
{
return;
}
PostOrderTravese(T->lchild);
PostOrderTravese(T->rchild);
printf("%d\n", T->data);
}
int TreeDeep (BiTNode *T)
{
int deep = 0;
if(T != NULL)
{
int leftdeep = TreeDeep(T->lchild);
int rightdeep = TreeDeep(T->rchild);
deep = leftdeep>rightdeep?leftdeep+1:rightdeep+1;
}
return deep;
}
{
int deep = 0;
if(T != NULL)
{
int leftdeep = TreeDeep(T->lchild);
int rightdeep = TreeDeep(T->rchild);
deep = leftdeep>rightdeep?leftdeep+1:rightdeep+1;
}
return deep;
}
int TreeLeaf (BiTNode *T)
{
static int num;
if(T != NULL)
{
if(T->lchild == NULL && T->rchild == NULL)
{
num++;
}
TreeLeaf(T->lchild);
TreeLeaf(T->rchild);
}
return num;
}
{
static int num;
if(T != NULL)
{
if(T->lchild == NULL && T->rchild == NULL)
{
num++;
}
TreeLeaf(T->lchild);
TreeLeaf(T->rchild);
}
return num;
}
int main ()
{
BiTNode *T;
int deep, num;
CreatBiTree(&T);
PreOrderTravese(T);
deep = TreeDeep(T);
num = TreeLeaf(T);
printf("%d %d\n", deep, num);
return 0;
}
{
BiTNode *T;
int deep, num;
CreatBiTree(&T);
PreOrderTravese(T);
deep = TreeDeep(T);
num = TreeLeaf(T);
printf("%d %d\n", deep, num);
return 0;
}