明白NULL不是真正的空,#才是空
主要看注释吧
#include <stdio.h>
#include <stdlib.h>
typedef struct TNode//二叉树节点
{
char data;
struct TNode *Lchild;
struct TNode *Rchild;
}TNode;
//先序输入建立二叉树
void CreatTree(TNode *temp)
{
temp->Lchild=NULL;//先制空
temp->Rchild=NULL;
char c1=getchar();
temp->data=c1;
if(c1=='#')
{
return ;//结束创建子叶
}
else
{
temp->Lchild=(TNode*)malloc(sizeof(TNode));//开空间
CreatTree(temp->Lchild);//递归创造树
temp->Rchild=(TNode*)malloc(sizeof(TNode));
CreatTree(temp->Rchild);
}
}
int PrintOrder(TNode *s)
{
int n=0;
if(s->data!='#')
{
if(s->Lchild->data=='#' && s->Rchild->data=='#')//左右子叶节点为空
{
return 1;
}
n+=PrintOrder(s->Lchild);//记录左边子叶数目
n+=PrintOrder(s->Rchild);//记录右边子叶数目
return n;
}
else return 0;
}
int main()
{
TNode *s;
s=(TNode*)malloc(sizeof(TNode));
int n=0;
CreatTree(s);
n=PrintOrder(s);
printf("%d",n);
return 0;
}
有帮助的话点个赞吧