двоичное дерево поиска — вставка в BST вызывает ошибку переполнения стека

Я сделал реализацию 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;
}

0

Решение

Линия:

return insert(e, val);

должно быть

return insert(e->l, val);
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector