Количество бинарных деревьев Количество листьев - PullRequest
0 голосов
/ 08 февраля 2011

Предположим, у вас уже есть базовые процедуры двоичного дерева isempty (bt), root (bt), left (bt) и right (bt). Напишите процедуру isLeaf (bt), которая возвращает истину, если двоичное дерево bt является листовым узлом, и ложь, если это не так.

Вот что у меня есть:

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 ]

1 голос
/ 08 февраля 2011

Вы научитесь очень немногим, если не попытаетесь решить это самостоятельно, а просто для тех, кто приходит сюда и ищет ответ:

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));
}
0 голосов
/ 18 января 2012

Как @jeffrey Greenham сказал, что мы можем использовать рекурсию

int countleaves(struct node* root){

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

}
0 голосов
/ 10 февраля 2011

Основная идея здесь состоит в том, чтобы использовать рекурсию:

Количество листьев, которые имеет узел, является суммой количества листьев, которые имеет его левый потомок, и количества листьев, которые имеет его правый потомок.

...