二叉树的创建
二叉树的先序遍历
二叉树的中序遍历
二叉树的后序遍历
计算二叉树的结点个数
计算二叉树的叶子结点个数
计算二叉树的高度

#include<stdlib.h>
#include<stdio.h>
#define ERROR 0
typedef char ElemType;
typedef struct BiTNode
{
	char  data;
	BiTNode
	*lchild,*rchild;
}*BiTree;
BiTree CreateBiTree(BiTree&T)
{
	char ch;
	scanf("%c",&ch);
	if(ch=='#')
	T=NULL;
	else
	{
		if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
			return ERROR;
		T->data=ch;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
	return T;
}
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 Count (BiTree T)
{
	if(T==NULL)
		return 0;
	else
		return 1+Count(T->lchild)+Count(T->rchild);
}
int Leaf_Conunt(BiTree T)
{
	if(T==NULL)
		return 0;
	else
	{
		if(!T->lchild&&!T->rchild)
			return 1;
		else
			return Leaf_Conunt(T->lchild)+Leaf_Conunt(T->rchild);
		}

}
int Height(BiTree T)
{
	if(T==NULL)
	return 0;
	else
	{
		int m=Height(T->lchild);
		int n=Height(T->rchild);
		return (m>n)?m+1:n+1;
	}
 } 
int main()
{
	BiTNode *b;
	printf("创建二叉树\n");
	CreateBiTree(b);
	printf("先序遍历二叉树\n");
	PreOrderTraverse(b);
	printf("\n中序遍历二叉树\n");
	InOrderTraverse(b);
	printf("\n后序遍历二叉树\n");
	PostOrderTraverse(b);
	printf("\n");
	int C=Count(b);
	printf("二叉树结点个数为: %d\n",C);
	int L_C=Leaf_Conunt(b);
	printf("二叉树中叶子结点个数为: %d\n",L_C);
	int H=Height(b);
	printf("二叉树的高度为: %d\n",H);
	return 0;
}