第一种:
int num=0; //全局变量,赋初值为0,在函数里可以改
void CountLeaf(BiTree T) //传入形参,指针T
{
if T{ //T存在,T是传的参,肯定存在,直接进入if
if(!T->lchlid && !T->rchild) //T不存在左子树且T不存在右子树
num++; //num==0,++为1,也就只有根结点一个
countleaf(T->lchild); //if不满足,说明存在左子树或者存在右子树,数左子树的根节点;
countleaf(T->rchild); //数右子树的根结点
}
} //整个CountLeaf()函数都在递归,数完根结点,数根结点的下一个左结点和右结点,再数根结点下一个左节点的下一个左节点和右结点
//num的数目主要是归的这个过程,当数到叶子结点时,不再往下递,开始结束分解过程,往函数传值
//Countleaf函数被调用后不用返回T值,所以用void修饰函数返回值。(表示不返回)
第二种:
Countleaf(BiTree T,int num) //num设置为局部变量,只能在函数内部使用
{
if T{
if(!T->lchild&&!T->rchlid)
num=Countleaf(T->lchild,num); //这次的递归直接传值给形参num
num=Countleaf(T->rchlid,num);
}
return num; //return是函数的返回值,指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过return语句返回。这里是指Countleaf函数被调用后要返回函数中形参num值,表示叶子结点的数目。
}