Бинарное дерево поиска(доп информация внутри)

#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)


Ответы (0 шт):