Получить количество родителей, равное сумме детей
У меня проблема с кодом ниже. мне нужно получить количество родителей, которое это значение = к сумме 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
,