структуры данных — не удается просмотреть элементы в дереве двоичного поиска в переполнении стека

Я пытаюсь распечатать все элементы с использованием обхода inorder, но мой код дает неправильный вывод. Я не могу понять, что пошло не так.

#include <iostream>
using namespace std;

struct node
{
int value;
struct node * left;
struct node * right;
};

class Btree
{
node * root;

void insert(int value, node * leaf);
node * search(int value, node * leaf);
void destroy(node * leaf);public:
Btree() { root = NULL; }
~Btree() {  destroy();  }
void insert(int value);
node * search(int value);
void destroy();
void inorder(node * ptr);
};

void Btree::inorder(node *ptr)
{
if (ptr != NULL)
{
inorder(ptr->left);
cout << ptr->value << "";
inorder(ptr->right);
}
}

void Btree::destroy(node *leaf)
{
if(leaf!=NULL)
{
destroy(leaf->left);
destroy(leaf->right);
delete leaf;
}
}

void Btree :: destroy()
{
destroy(root);
}node *Btree::search(int value, node *leaf)
{
if(leaf!=NULL)
{
if(value==leaf->value)
return leaf;
if(value<leaf->value)
return search(value, leaf->left);
else
return search(value, leaf->right);
}
else return NULL;
}

node *Btree::search(int value)
{
return search(value, root);
}void Btree::insert(int value, node *leaf)
{
if(value< leaf->value)
{
if(leaf->left!=NULL)
insert(value, leaf->left);
else
{
leaf->left=new node;
leaf->left->value=value;
leaf->left->left=NULL;    //Sets the left child of the child node to null
leaf->left->right=NULL;   //Sets the right child of the child node to null
}
}
else if(value>=leaf->value)
{
if(leaf->right!=NULL)
insert(value, leaf->right);
else
{
leaf->right=new node;
leaf->right->value=value;
leaf->right->left=NULL;  //Sets the left child of the child node to null
leaf->right->right=NULL; //Sets the right child of the child node to null
}
}
}void Btree::insert(int value)
{
if(root!=NULL)
insert(value, root);
else
{
root=new node;
root->value=value;
root->left=NULL;
root->right=NULL;
}
}int main()
{
Btree bst;
struct node * root = NULL;
root = new node;
bst.insert(10);
bst.insert(6);
bst.insert(14);
bst.insert(3);
bst.insert(8);
bst.insert(7);
bst.insert(9);
bst.insert(5);

bst.inorder(root);
return 1;
}

Я попытался создать указатель памяти, который является корнем, а затем передать его в вызове функции inorder. Мой заказ должен напечатать мне вывод

3 5 6 7 8 9 10 14

Указатель на пошаговый отладчик помог бы мне в решении проблемы, в которую я верю. Или, если кто-нибудь может предоставить мне исправленный код, было бы весьма полезно

Редактировать: — Я ранее передавал ptr, но использовал root в своем определении функции inorder (из-за которого я получал ошибку Bus), но теперь это исправлено. Тем не менее, я все еще не получаю правильный вывод. Я получаю вывод 0

0

Решение

Задача ещё не решена.

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

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

По вопросам рекламы [email protected]