二进制树计数叶数

时间:2011-02-08 11:02:39

标签: algorithm binary-tree procedure

假设您已经拥有基本的二进制树程序isempty(bt),root(bt),left(bt)和right(bt)。编写一个过程isLeaf(bt),如果二叉树bt是叶节点则返回true,如果不是,则返回false。

这就是我所拥有的:

proc isLeaf(bt)
if (isEmpty(bt))
error('The binary tree is empty.');
elseif (left(bt) < right(bt))
return true;
else return false;

然后编写一个过程numLeaves(bt),它返回二叉树bt中的叶数。

这就是我所拥有的:

proc numLeaves(bt)
if (isEmpty(bt))
error ('The binary tree is empty.');
elseif (count left(bt) + right(bt));
return (left(bt) + right(bt);

请你纠正吗?

3 个答案:

答案 0 :(得分:1)

如果你不试图自己解决这个问题,你将学到很少甚至没有,但只是为了那些来这里寻找答案的人:

boolean isLeaf (BinaryTree bt) {
    return !isempty(bt) && isempty(left(bt)) && isempty(right(bt));
}

int numLeaves (BinaryTree bt) {
    if (isempty(bt))
        return 0;
    else if (isLeaf(bt))
        return 1;
    else
        return numLeaves(left(bt)) + numLeaves(right(bt));
}

答案 1 :(得分:0)

这里的主要思想是使用递归:

节点所拥有的叶数是其左子所具有的叶数与其右子所拥有的叶数之和。

答案 2 :(得分:0)

正如@jeffrey greenham所说,我们可以使用递归

int countleaves(struct node* root){

 if(root!=null)
{
countleaves(root->left);
if(root->left==NULL&&root->right==NULL)
{
count++;
}
countleaves(root->right);
}

}