Вставка в 2-3-4 дерева

В настоящее время я пытаюсь написать программу, которая использует 2-3-4 дерева, и у меня возникают проблемы с функцией вставки. Вот соответствующий код ..

int main () {

tree234 myTree;
myTree.insert("hello");

myTree.printTree();

return 0;
}

//-------------tree234.cpp-------------
#include "tree234.h"#include <string>
#include <iostream>

void tree234::insert(string input){
int index;

if (nullRoot == true) {
//insert root
initNode(root);

root->data[0] = input;

nullRoot = false;

return;
}
}

void tree234::initNode(Node* node) {
node = new Node();
node->pointer[0] = NULL;
node->pointer[1] = NULL;
node->pointer[2] = NULL;
node->pointer[3] = NULL;
node->data[0] = "";
node->data[1] = "";
node->data[2] = "";
}

//-----------tree234.h--------------
#ifndef TREE_234_H_
#define TREE_234_H_

using namespace std;
#include <iostream>

class tree234{
private:
struct Node {
public:
string data[3];
Node* pointer[4];
};

Node* curr;
Node* root;
Node* right;
Node* newRoot;
bool nullRoot = true;

public:
void insert(string data);
void initNode(Node* node);
};

#endif

Он всегда разрывается в строке 19 с ошибкой адреса памяти. Я попытался отладить его, и он разрывается на строке 2245 внутри строкового файла (если это поможет). Эта информация на самом деле не очень мне помогла, так что, может быть, кто-то может помочь мне с тем, что именно здесь не так?

0

Решение

Есть несколько проблем. Исправьте следующий материал и посмотрите, работает ли он тогда …

CPP, вставьте:
Ваше условие if является заданием.

cpp, initNode:
Функция изменяет копию переданного указателя.
Звонящий не получит ничего от выделенного объекта.
Использовать ссылку на указатель (&*) или указатель на указатель
(с соответствующим вызовом функции и контентом) в качестве аргумента ..
То есть,

void tree234::initNode(Node *& node)
1

Другие решения

для одного у вас есть:

if (nullRoot = true) {

то, что вы, вероятно, хотите, это «==», вы должны, вероятно, проверить предупреждения компилятора, а также ошибки.
Надеюсь, это поможет.
🙂

«==» — это сравнение (результат логический), тогда как «=» — это присваивание, следовательно, вы устанавливаете для nullRoot значение true.

0

По вопросам рекламы [email protected]