Как отобразить дерево по уровню в C ++ - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь отобразить уровень дерева за уровнем, но мне кажется, что у меня проблемы с пониманием концепции.Я знаю, что мне нужно использовать очередь для вставки различных значений, а затем вставлять их позже.Больше всего меня смущает попытка определить, когда мне нужно добавить новую строку.Вот большая часть кода.

Также у каждого узла есть символ, счетчик и указатель влево и вправо.

//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 += "";  
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...