Получить количество родителей, равное сумме детей

У меня проблема с кодом ниже. мне нужно получить количество родителей, которое это значение = к сумме 2 детей. Например, если родительское значение = 10 и его дочерние элементы равны 2 и 8. тогда я должен считать этого родителя равным 1. Мне нужно проверить все узлы в дереве.

this is what i tried to do: could you please advise:


int BinaryTree::numberOfSum (){
return numberOfSumImpl (root);
}
int BinaryTree::numberOfSumImpl (BTNode *rootNode, int el){
    if(rootNode ==0) return 0;
    int count=0;
        if(rootNode->hasTwoChildren() || rootNode->isLeaf()) 
        else if{
            if (rootNode->info==el) return count=1;
        return count + numberOfSumImpl(el,rootNode->left) + numberOfSumImpl(el,rootNode->right);
        }
}


Many Thanks, 

1 ответ

Кажется, есть несколько проблем с призывом к numberOfSumImpl, как и в основной функции, она вызывается только с одним параметром, а в рекурсивной функции она вызывается с двумя параметрами, но с обратным порядком. Этот код даже не компилируется!

Кроме того, состояние rootNode->hasTwoChildren() || rootNode->isLeaf()) выглядит странно и, имея его тело пустым, еще более странным.

Вы не опубликовали определение BTNode, но, похоже, вы ищете что-то

int BinaryTree::numberOfSumImpl (BTNode* p) {
    if (not p) return 0;
    int count;
    if (p->hasTwoChildren() and p->info == p->left->info + p->right->info) {
        count = 1;
    } else {
        count = 0;
    }
    return count + numberOfSumImpl(p->left) + numberOfSumImpl(p->right);
}

И эта функция, возможно, будет static,

Другие вопросы по тегам