#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BiNode
{
char data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
void BuildinPreorder(BiTree *T)
{
char c;
c=getchar();
/* T=(BiTree*)malloc(sizeof(BiTree));这一句不能加,因为在主函数里数根节点的位置已经确定下来了,这一句的添加会使这个位置不断变动,导致数据的丢失*/
*T=(BiTree)malloc(sizeof(BiNode));
if('A'<=c&&c<='Z')
{
(*T)->data=c;
BuildinPreorder(&((*T)->lchild));
BuildinPreorder(&((*T)->rchild));
}
else if(c=='#')
(*T)=NULL;/*给*T赋为NULL而不是给T,为什么?改变和赋值给结点靠的是指针*T而不是T,T不能改动*/
return;
}
int count=0;
void CountLeaf(BiTree*T)
{
if(*T==NULL)
return;
if(((*T)->lchild==NULL)&&((*T)->rchild==NULL))
{
count++;
return;
}
if((*T)->lchild!=NULL)
{
CountLeaf(&((*T)->lchild));
CountLeaf(&((*T)->rchild));
}
if((*T)->rchild!=NULL&&(*T)->lchild==NULL)
{
CountLeaf(&((*T)->rchild));
}
}
int main()
{
BiTree*P;
P=(BiTree*)malloc(sizeof(BiTree));
*P=(BiTree)malloc(sizeof(BiNode));//可有可无
BuildinPreorder(P);
CountLeaf(P);
printf("%d",count);
return 0;
}
数据结构noj16
最新推荐文章于 2024-07-06 22:34:06 发布