Извините, но в этом коде не так уж много правильного.
Дизайн неправильный.Вам нужно запросить ключ в главной функции, а затем передать ключ методу insertion
в качестве параметра.Не имеет смысла передавать временный узел в качестве параметра.Если insertion
нужен временный узел, он должен создать его для себя.
Также insertion
не нужно возвращать BST, ему нужно только изменить BST, на который указывает указатель this
.Так что insertion
должно выглядеть примерно так
void bst::insertion(int key) {
...
}
И main должно выглядеть примерно так
int main()
{
bst b;
for (int i = 0; i < 5; i++)
{
cout << "enter data";
int key;
cin >> key;
b.insertion(key);
}
b.inorder();
}
Метод bst::inorder
имеет похожие ошибки.
Также bstне нуждается в переменных-членах для ключа и временного узла.Так что удалите
int key;
node *temp;
из class bst
.Если вам нужны эти переменные в методе, тогда объявите их в методе, не в классе.Единственное, что нужно классу - это указатель на корень.
Алгоритм в insertion
неверен.Для добавления узла в BST требуется какой-то цикл .Вы должны перебирать дерево, пока не доберетесь до свободного слота, только тогда вы сможете вставить узел.Ваш insertion
код не имеет цикла, поэтому он не может быть правильным.
Наконец, причина сбоя вашего кода здесь
if(root==NULL)
{
cout<<"Enter Root Ki info:"<<endl;
cin>>root->data;
Если root равен NULL, тогда root->data
- ошибкаи может привести к сбою вашей программы.
Слишком много проблем с этим кодом.Я думаю, вам нужно лучше понять, как проектировать классы, прежде чем пытаться их кодировать.К сожалению.