2012-10-12 81 views
0

我已經做了BST的實現,並且當我插入一些值時,我在INSERT函數中得到錯誤。如果我將主函數中的-32替換爲32(請參閱主)它工作正常,但現在出現錯誤。我找不到它。插入到BST導致錯誤C++

#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

沒有'在身體return'聲明:'布爾插入(BST * d,INT VAL)' –

回答

2

行:

return insert(e, val); 

應該

return insert(e->l, val);