描述
求二叉树叶子结点的个数
输入
输入串中圆点表示某个结点的孩子指针为空,例如:AB.D..C.. ,这表示结点B没有左孩子,结点D没有左、右孩子,结点C没有左、右孩子。
输出
二叉树上叶子结点的个数。
输入样例 1
ABD..E.G..C.FH..I..
输出样例 1
4
C代码:
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int ans = 0;
BiTree CreateBiTree()//建立二叉树
{
ElemType x;
BiTree T;
scanf("%c",&x);
if(x=='.') //当输入‘.’时表示子树为空
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=x;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
}
return T;
}
void Leaf(BiTree T)//后序遍历统计叶子节点数目
{
if(T!=NULL)
{
Leaf(T->lchild);
Leaf(T->rchild);
if(T->lchild==NULL&&T->rchild==NULL)
ans++;
}
}
int main()
{
BiTree root = CreateBiTree();
Leaf(root);
printf("%d\n",ans);
return 0;
}