插入BST会导致错误C ++

时间:2012-10-12 19:27:11

标签: c++ binary-search-tree

我已经实现了BST,当我插入一些值时,我在INSERT函数中得到了错误。如果我将主函数中的-32替换为32( 参见主 ),它可以正常工作,但现在有错误。我找不到了。

#include <iostream>
#include <cstdlib>
using namespace std;

struct Node{
    int val;
    Node* l;
    Node* p;

    Node(int val){
        this->val = val;
        l = NULL;
        p = NULL;
    }
};

struct BST{
    Node* root;
    BST(int val){
        root = new Node(val);
    }
};

bool insert(Node* e, int val){
    if(e->val == val){
        return false;
    }
    else if(val < e->val){
        if(e->l == NULL){
            e->l = new Node(val);
            return true;
        } else
            return insert(e, val);
    } else if(val > e->val){
        if(e->p == NULL){
            e->p = new Node(val);
            return true;
        }else
            return insert(e->p, val);
    } return false;
}

bool insert(BST* d, int val){
    insert(d->root, val);
}

void infixDisplay(Node* w){
   if(w != NULL){
        infixDisplay(w->l);
        cout<<w->val<<endl;
        infixDisplay(w->p);
    }
}

void infixDisplay(BST* d){
    infixDisplay(d->root);
}

int main(){
    BST* d = new BST(4);
    insert(d,12);
    insert(d,-32); // REPLACE WITH +32 IT IS OK!
    insert(d,4);
    insert(d,89);
    insert(d,6);
    insert(d,3);
    infixDisplay(d);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

该行:

return insert(e, val);

应该是

return insert(e->l, val);