二叉树的创建
二叉树的先序遍历
二叉树的中序遍历
二叉树的后序遍历
计算二叉树的结点个数
计算二叉树的叶子结点个数
计算二叉树的高度
#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;
}