#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -1
typedef int Status;
typedef char TElemType;
typedef struct BitNode
{
TElemType data;
struct BitNode *lchild, *rchild;
} BitNode, *BitTree;
Status CreateBitTree(BitTree &T)
{
char ch;
scanf("%c", &ch);
if(ch == '#')
T = NULL;
else
{
if(!(T = (BitNode*)malloc(sizeof(BitNode))))
return OVERFLOW;
T->data = ch;
CreateBitTree(T->lchild);
CreateBitTree(T->rchild);
}
return OK;
}
void PreOrderTraverse(BitTree T)
{
if(!T)
return ;
printf("%c ", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
void InOrderTraverse(BitTree T)
{
if(!T)
return ;
InOrderTraverse(T->lchild);
printf("%c ", T->data);
InOrderTraverse(T->rchild);
}
void PostOrderTraverse(BitTree T)
{
if(!T)
return ;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ", T->data);
}
int CountNode(BitTree T)
{
if(!T)
return 0;
return CountNode(T->lchild) + CountNode(T->rchild) + 1;
}
int MyMax(int a, int b)
{
if(a >= b)
return a;
return b;
}
int GetHigh(BitTree T)
{
if(!T)
return 0;
return MyMax(GetHigh(T->lchild), GetHigh(T->rchild)) + 1;
}
int CountLeafNode(BitTree T)
{
if(!T)
return 0;
if(!T->lchild && !T->rchild)
return 1;
return CountLeafNode(T->lchild) + CountLeafNode(T->rchild);
}
int main()
{
BitTree T;
CreateBitTree(T);
printf("\n先序遍历:");
PreOrderTraverse(T);
printf("\n中序遍历:");
InOrderTraverse(T);
printf("\n后序遍历:");
PostOrderTraverse(T);
printf("\n二叉树的总结点数为:%d", CountNode(T));
printf("\n二叉树的高度为:%d", GetHigh(T));
printf("\n二叉树的叶子结点数为:%d", CountLeafNode(T));
printf("\n");
system("pause");
return 0;
}