Я пытаюсь отобразить уровень дерева за уровнем, но мне кажется, что у меня проблемы с пониманием концепции.Я знаю, что мне нужно использовать очередь для вставки различных значений, а затем вставлять их позже.Больше всего меня смущает попытка определить, когда мне нужно добавить новую строку.Вот большая часть кода.
Также у каждого узла есть символ, счетчик и указатель влево и вправо.
//CharacterAnalyzer.cpp
string CharacterAnalyzer::displayByLevel(nodeptr_t const node, Function visit) const {
/* TODO (2):
* Display the tree one level at a time. For each level
* you must display all the nodes at that level.
*
* If a child is absent (i.e. nullptr), then output 'null'.
*
* So, for the text "Hello all!" the level display will be:
* (H,1)
* (E,1)(L,4)
* (A,1)(null)(null)(O,1)
* (null)(null)(null)(null)
*/
}// end displayByLevel()
Я предполагаю, что это используется для посещения функции впараметр.Это CharacterAnalyzer.h
// using Function = string (const char character, const int count) *;
typedef string (* Function)(const char character, const int count);
Вот один метод, который я попробовал, но он не удался
string str = "";
if (node == nullptr) {
return str += "(null)";
}
queue<nodeptr_t> q;
q.push(node);
while (q.empty() == false)
{
// nodeCount (queue size) indicates number
// of nodes at current level.
int nodeCount = q.size();
while (nodeCount > 0)
{
nodeptr_t node = q.front();
str += visit(node->character, node->count) + " ";
q.pop();
if (node->left != nullptr)
q.push(node->left);
if (node->right != nullptr)
q.push(node->right);
nodeCount--;
}
str += "";
}