计算二叉树叶子结点数目
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char Data;
struct Node* LChild;
struct Node* RChild;
}BiTNode,*PBiTNode;
int cnt=0;
void CreateBiTree(PBiTNode *bt) //这个直接递归就好了,不用循环
{
char ch;
ch=getchar();
if(ch=='\n') //到换行的话应该是已经到根节点了
{
return;
}
else if(ch=='#') //一个左括号就新创建一个左子树。
{
(*bt)=NULL;//这个bt是新的子树的结点啊,为空是自然的
}
else
{
(*bt)=(PBiTNode)malloc(sizeof(BiTNode));
(*bt)->Data=ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild)); //(*bt)一定要打括号
}
return;
}
void printleafcnt(PBiTNode bt)
{
if(bt!=NULL)
{
if(bt->LChild==NULL&&bt->RChild==NULL)//叶节点的标志
cnt++;
printleafcnt(bt->LChild);
printleafcnt(bt->RChild);
}
}
int main()
{
PBiTNode bt;
CreateBiTree(&bt); //创建是要写取地址符的。
printleafcnt(bt);
printf("%d\n",cnt);
return 0;
}