C语言二叉树遍历
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
char data;
struct Node *LChild;
struct Node *RChild;
}BiTNode, *BiTree;
int count;
void CreateBiTree(BiTree *bt)
{
char ch;
ch = getchar();
if(ch=='.')
*bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild));
}
}
void PreOrder(BiTree root)
{
if (root!=NULL)
{
printf("%c ",root ->data);
PreOrder(root ->LChild);
PreOrder(root ->RChild);
}
}
void InOrder(BiTree root)
{
if (root!=NULL)
{
InOrder(root ->LChild);
printf("%c ",root ->data);
InOrder(root ->RChild);
}
}
void PostOrder(BiTree root)
{
if(root!=NULL)
{
PostOrder(root ->LChild);
PostOrder(root ->RChild);
printf("%c ",root ->data);
}
}
void leaves(BiTree root)
{
if(root!=NULL)
{
leaves(root->LChild);
leaves(root->RChild);
if (root ->LChild==NULL && root ->RChild==NULL)
count++;
}
}
int PostTreeDepth(BiTree bt)
{
int hl,hr,max;
if(bt!=NULL)
{
hl=PostTreeDepth(bt->LChild);
hr=PostTreeDepth(bt->RChild);
max=hl>hr?hl:hr;
return(max+1);
}
else return(0);
}
int main()
{
BiTree T;
CreateBiTree(&T);
printf("先序遍历:");
PreOrder(T);
printf("\n");
printf("中序遍历:");
InOrder(T);
printf("\n");
printf("后序遍历:");
PostOrder(T);
printf("\n");
leaves(T);
printf("叶子结点数:%d\n",count);
printf("高度:%d\n",PostTreeDepth(T));
}