Я пишу двоичное дерево в объектно-ориентированном формате. У меня был опыт работы с бинарными деревьями, но с тех пор, как я коснулся этого, уже давно Моя проблема в том, что я не могу назначить узел своему корню. Каждый раз, когда я проверяю в режиме отладки, рут остается 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
.