树的存储结构
typedef struct BiTNode
{
char data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
代码实现
int GetLeafNodeNumber(BiTree T)
{
int count =0;
if(T!=NULL)
{
if(T->lchild==NULL&&T->rchild==NULL)
{
count=1;
}
else
{
count=GetLeafNodeNumber(T->lchild)+GetLeafNodeNumber(T->rchild);
}
}
return count;
}
算法思路分析
采用递归思想,当根节点不为空的时候,由于要寻找的是叶子结点,而叶子结点的特点就是不含左右孩子,所以当根节点不为空且没有左右孩子的情况下,该结点为叶子结点,那么count置为1,代表这一个叶子节点
当根节点不为空,但仍然含有左右孩子的情况下,继续向下遍历,分别计算其左右孩子的叶子数,将其左右孩子的叶子结点数相加。
这个分别计算其左右孩子叶子数的过程,即可采用递归来实现,传入其左右孩子的指针