У меня есть это сложное упражнение, которое я получил из книги о C++, и я не уверен, как решить эту проблему. Я должен определить функцию с именем treeNodeCount()
, которая возвращает количество узлов в двоичном дереве (достаточно просто), и я также должен определить перегруженную функцию, которая принимает int (0,1 или 2), которая представляет количество детей , и функция должна возвращать узлы с определенным количеством детей. treeNodeCount
должны использовать функцию, называемую nodeCount(elemType root)
, чтобы выполнить рекурсию, необходимую для подсчета узлов (так что в основном вся работа).Учет узлов с определенным количеством детей в двоичном дереве?
вызов номер один говорит, что я могу добавить второй параметр в nodeCount
, который принимает количество детей для узлов, которые мы хотим подсчитать.
Задача номер два говорит, что мы не можем использовать второй параметр (это жесткая часть)
Я был в состоянии сделать вызов один, и вот что я придумал:
template <class elemType>
int binaryTreeType<elemType>::nodeCount(nodeType<elemType> *p, int a) const
{
if (p == NULL){
return 0;
}
else if (a == 0 && p->lLink == NULL && p->rLink == NULL){
return 1 + nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
}
else if (a == 1 && (p->lLink != NULL^p->rLink != NULL)){
return 1 + nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
}
else if (a == 2 && p->lLink != NULL && p->rLink != NULL){
return 1 + nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
}
else if (a == -1){
return nodeCount(p->lLink, a) + nodeCount(p->rLink, a) + 1;
}
return nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
}
template <class elemType>
int binaryTreeType<elemType>::treeNodeCount(int a) const{
return nodeCount(root, a);
}
Этом кажется, работает нормально, но я убежден, что должен быть лучший способ. Я не смог сделать вызов 2, хотя, и я понятия не имею, что делать (возможно ли это вообще)
Реализация 'nodeCount' не имеет условия остановки для рекурсии. Есть несколько разводов указателя, который в этот момент может быть пустым. –
Дорогой, я исправлю. –
Исправлено: спасибо за указание! –