Корневой узел должен иметь назначенный узел, но остается NULL.Почему я не могу назначить узел своему корню? - PullRequest
0 голосов
/ 20 июня 2019

Я пишу двоичное дерево в объектно-ориентированном формате. У меня был опыт работы с бинарными деревьями, но с тех пор, как я коснулся этого, уже давно Моя проблема в том, что я не могу назначить узел своему корню. Каждый раз, когда я проверяю в режиме отладки, рут остается NULL. Пока это происходит, узел cur содержит всю назначенную ему информацию.

Я попытался сделать мой root закрытым и изменить this->root = NULL; на root-> = NULL;. Я также пытался обнародовать все свои функции, но это не имело значения. Я попытался объявить потомки root пустыми значениями, а имя - пустой строкой.

main.cpp

#include <iostream>
#include <string>
#include <fstream>
#include "Friends.h"

using namespace std;

int main() {
    string line;
    ifstream file;
    file.open("friends.txt");

    Friends f;

    while (getline(file, line)) {
        f.insert(f.root, line);
    }
    f.print(f.root);

    system("pause");
    return 0;
}

Friends.cpp

#include "Friends.h"
#include <iostream>
#include <string>

using namespace std;

Friends::Friends() {
    this->root = NULL;
}

Friends::node* Friends::createNode(string& val) {
    node* newNode = new node();
    newNode->left = NULL;
    newNode->right = NULL;
    newNode->name = val;
    return newNode;
}

Friends::node* Friends::insert(node* cur, string& val) {
    if (!cur) {
        cur = createNode(val);
    }
    else if (val < cur->name) {
        insert(cur->left, val);
        return cur;
    }
    else if (val > cur->name) {
        insert(cur->right, val);
        return cur;
    }
    return NULL;
}

void Friends::print(node* cur) {
    if (!cur) {
        return;
    }
    print(cur->left);
    cout << cur->name << endl;
    print(cur->right);
}

Friends.h

#ifndef FRIENDS_H
#define FRIENDS_H

#include <string>

using namespace std;

class Friends {
private:
    struct node {
        string name;
        node* left;
        node* right;
    };
public:
    node* root;
    node* insert(node* cur, string&);
    void print(node* cur);
    Friends();
    node* createNode(string&);
};

#endif

Корневой узел должен иметь узел, но он продолжает отображаться как значение NULL. Он также не работает с ошибками. Это просто остается как NULL.

1 Ответ

1 голос
/ 20 июня 2019

изменить с:

node* insert(node* cur, string&);

на:

node* insert(node* &cur, string&);

должно исправить

Конечно, заголовок реализации также должен быть изменен

...