插入2-3-4树

时间:2014-02-12 23:09:12

标签: c++ tree 2-3-4-tree

我正在尝试编写一个使用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行中断(如果这有帮助的话)。这些信息对我没有多大帮助,所以也许有人可以帮我解决这里究竟出了什么问题?

2 个答案:

答案 0 :(得分:1)

有很多问题。修复以下内容,看看它是否有效......

cpp,插入:
你的if条件是一项任务。

cpp,initNode:
该函数正在更改传递指针的副本 调用者不会得到任何已分配的对象 使用对指针(&amp; *)的引用或指向指针的指针 (具有匹配的函数调用和内容)作为参数.. 即,

void tree234::initNode(Node *& node)

答案 1 :(得分:0)

一,你有:

if (nullRoot = true) {

你可能想要的是“==” 您应该检查编译器警告以及错误。 希望有所帮助。 :)

“==”是比较(结果布尔值),而“=”是赋值,因此您将nullRoot设置为true。