
明白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;
}
有帮助的话点个赞吧
该博客介绍了如何通过输入字符创建二叉树,并使用'#'作为终止标志。代码中定义了二叉树节点结构,通过先序遍历的方式递归构建树。同时,提供了一个函数用于计算二叉树中叶子节点的数量。在主函数中,展示了创建树并打印叶子节点数的过程。
2126

被折叠的 条评论
为什么被折叠?



