Бинарное дерево поиска(доп информация внутри)
#include <iostream>
#include <vector>
#include <fstream>
using std::cout;
using std::cin;
using std::string;
using std::endl;
std::ifstream fin("C:\\Users\\Игорь\\Desktop\\input1.txt");
struct Node
{
int number;
int lenght;
string startPoint;
string endPoint;
Node* leftptr;
Node* rightptr;
};
Node* GetNewNode() {
Node* newNode = new Node();
fin >> newNode->number;
fin >> newNode->lenght;
fin >> newNode->startPoint;
fin >> newNode->endPoint;
newNode->leftptr = newNode->rightptr = nullptr;
return newNode;
}
void Preorder(Node* rootptr) {
if (rootptr == nullptr) return;
cout << rootptr->number << " ";
Preorder(rootptr->leftptr);
Preorder(rootptr->rightptr);
cout << endl;
}
Node *Insert(Node* rootptr, int number) {
if (rootptr == nullptr) {
rootptr = GetNewNode();
return rootptr;
}
else if (number <= rootptr->number) {
rootptr->leftptr = Insert(rootptr->leftptr, number);
}
else if (number>=rootptr->number) {
rootptr->rightptr = Insert(rootptr->rightptr, number);
}
return rootptr;
}
int main() {
Node* rootptr = nullptr;
std::vector<Node>conteiner;
for (int i = 0; i < 5; i++) {
conteiner.push_back(*GetNewNode());
Insert(rootptr, conteiner[i].number);
cout << conteiner[i].number << " ";
}
//Preorder(rootptr);
return 0;
}
Нужно создать бинарное дерево данных для поиска по экземплярам структуры. Данные заполнения структуры читаются из файла, ключом я взял поле number, в файле оно в порядке 3 2 4 1 5. В main, в цикле, если без строки с Insert, то выводит 3 2 4 1 5 , если с Insert, то 3 4 5 0 0. Как такое может быть, если conteiner[i].number - просто передаваемый параметр. И почему если в функции Insert перед return написать cout << rootptr << " "; Ничего не выводится? Функция ведь вызывается, и cout вне всяких операторов.
UPD: ошибка, как я полагаю, в том, что я два раза вызываю GetNewNode, отсюда другой вопрос: как мне единожды создав в функции GetNewNode узел обращаться к его полям(в Insert мне надо передать newNode->number)