Создание двоичного дерева из строки. Пример: 1,2,3, #, #, 4,5, #, #, #, #, - PullRequest
0 голосов
/ 06 августа 2020

Я создаю двоичное дерево из строки, используя алгоритм BFS, и у меня есть вопрос: зачем мне писать « TreeNode node = tree.front (); "после while l oop вместо" root = tree.front (); ". Почему я не могу просто использовать уже созданный TreeNode root?

TreeNode* helper(queue<string> &q) {
    string data = q.front(); q.pop();
    if (data == "#") return NULL;
    
    queue<TreeNode*> tree;
    TreeNode* root = new TreeNode(stoi(data));
    tree.push(root);

    while(!tree.empty()) {
        int size = tree.size();
        for (int i = 0; i < size; i++) {
            TreeNode* node = tree.front();

            string newNode = q.front(); q.pop();
            if (newNode != "#") {
                node -> left = new TreeNode(stoi(newNode));
                tree.push(node -> left);
            } 

            string newNode = q.front(); q.pop();
            if (newNode != "#") {
                node -> right = new TreeNode(stoi(newNode));
                tree.push(node -> right);
            }

            tree.pop();
        }
    }
    return root;
}

1 Ответ

1 голос
/ 06 августа 2020

Потому что root указывает на root дерева, которое должна возвращать функция, а root дерева уже определено (это первый элемент входной очереди).

Запись root = tree.front() сделает последний созданный узел root дерева, и дерево будет иметь только один элемент.

...