Я сделал реализацию 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;
}
Линия:
return insert(e, val);
должно быть
return insert(e->l, val);
Других решений пока нет …