Как я могу заставить это дерево работать должным образом? - PullRequest
0 голосов
/ 25 января 2019

Я не могу заставить это дерево действовать правильно.я продолжаю получать коды ошибок выхода.Что происходит с деревом и как мне использовать функцию поиска в основном?кажется, что методы закодированы правильно, но я не использую его правильно в основном.я продолжаю получать ошибки выхода, которые не равны 0, и ни один из методов, которые я пытаюсь использовать в основной функции, не работает.сейчас я просто набираю пробел, чтобы заполнить пробел, потому что мой пост в основном состоит из кода и недостаточно текста!

1 Ответ

0 голосов
/ 12 мая 2019

Первое, что ваша функция addNode с подписью void bTree :: addNode (int key, node * nod) делает это:

if (key < nod->left->data) {

Проблема с вашим кодом в том, что nod-> left приведет к сбою, так как левый узел не был инициализирован и ведет к несанкционированному доступу к памяти, или к так называемой ошибке сегментации . Давайте пройдемся по основному циклу.

  1. addNode (10) - функция addNode с сигнатурой void bTree :: addNode (int key) вызывается, root равен нулю, поэтому root создается с левым и правым узлами, установленными в NULL.
  2. addNode (6) - функция addNode с сигнатурой void bTree :: addNode (int key) вызывается, корень НЕ является нулевым, поэтому addNode с сигнатурой void bTree :: addNode (int ключ, узел * кивок) вызывается. Затем кивни-> налево и вылетай.

Это распространенная проблема в низкоуровневом программировании, и я советую вам поместить отладочные отпечатки в функции, чтобы увидеть, какие параметры введены и где именно произошел сбой кода. Если вы можете точно определить точную линию, которая приводит к сбою (в данном случае это строка с nod-> left), вы сможете решить такие проблемы в будущем легче.

Чтобы устранить проблему, просто инициализируйте левый и правый узлы, прежде чем получить к ним доступ.

...