插入二叉搜索树

时间:2013-10-23 22:25:55

标签: c++ exception binary-search-tree unhandled

我编写了一个将节点插入二叉搜索树的函数。但是,在尝试在Visual Studio 2013中构建解决方案时,我会收到:“BST.exe中0x00FD4CD0处的未处理异常:0xC0000005:访问冲突读取位置0xCCCCCCCC”。以下是我的代码。

void BST::insert(int value) {
    Node* temp = new Node();
    temp->data = value;
    if(root == NULL) {
        root = temp;
        return;
    }
    Node* current;
    current = root;
    Node* parent;
    parent = root;
    current = (temp->data < current->data) ? (current->leftChild) : (current->rightChild);
    while(current != NULL) {
        parent = current;
        current = (temp->data < current->data) ? (current->leftChild) : (current->rightChild);
    }
    if(temp->data < parent->data) {
        parent->leftChild = temp;
    }
    if(temp->data > parent->data) {
        parent->rightChild = temp;
    }
}

然后在我的主要功能中我有:

int main() {
    BST bst;
    bst.insert(10);
    system("pause");
}

当我删除bst.insert(10);在我的主函数中,我不再收到未处理的异常。

以下是我的struct

的初始化
struct Node {
    int data;
    Node* leftChild;
    Node* rightChild;
    Node() : leftChild(NULL), rightChild(NULL) {} 
};
struct BST {
    Node* root;
    void insert(int value);
    BST() : root(NULL) {}
};

1 个答案:

答案 0 :(得分:1)

在插入功能中,您没有将leftChildrightChild设置为NULL。

void BST::insert(int value) {
    Node* temp = new Node();
    temp->data = value;
    temp->leftChild = NULL;
    temp->rightChild = NULL;
    if(root == NULL) {
        root = temp;
        return;
    }

另外,我无法确定(因为您没有发布BST的构造函数),但您可能没有在BST构造函数中将root设置为NULL。尝试这些修改。

好像你在BST中没有构建者来自你发布的内容:

struct BST {
    Node* root;
    void insert(int value);
    BST(): root(NULL) { } // add a constructor to initialize root to NULL
};