0

基本的なバイナリ ツリー プロシージャ isempty(bt)、root(bt)、left(bt)、および right(bt) が既にあるとします。二分木 bt が葉ノードであれば真を返し、そうでなければ偽を返す手続き isLeaf(bt) を書きなさい。

これは私が持っているものです:

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

次に、バイナリ ツリー bt の葉の数を返すプロシージャ numLeaves(bt) を記述します。

これは私が持っているものです:

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

訂正していただけますか?

4

3 に答える 3

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));
}
于 2011-02-08T12:41:58.037 に答える
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);
}

}
于 2012-01-18T07:25:01.397 に答える
0

ここでの主なアイデアは、再帰を使用することです。

ノードが持つ葉の数は、その左側の子が持つ葉の数と、右側の子が持つ葉の数の合計です。

于 2011-02-09T22:09:16.053 に答える