Я просто пробую реализацию бинарного дерева.Это не для колледжа, поэтому я не могу спросить учителя: (
Я пытался отладить его с помощью отладчика Codeblocks, но я все еще не понимаю, что происходит не так.
Я используюкласс вместо структуры. В настоящее время я реализовал только функции вставки и обхода inorder. Для функции вставки я проверяю, является ли корневой узел NULL или нет. Если это NULL, newNode становится равным корневому узлу. Или же янайдите соответствующий родительский узел и затем добавьте newNode в качестве его потомка.
И в функции обхода inorder моя рекурсия верна?
Редактировать: Оказывается, я не инициализировал свойПеременные узла. Мой код работает после инициализации этих переменных. Спасибо за вашу помощь!
#include<iostream>
using namespace std;
class Node
{
public:
int data;
Node* left_child;
Node* right_child;
};
Node* root = NULL;
void insertion();
void inorder_travesal(Node*);
int main(){
char ch;
do{
int choice;
cout<<"\nEnter your choice: \n1. Insertion\n2. Inorder Traversal\n : ";
cin>>choice;
switch(choice){
case 1: insertion();
break;
case 2: inorder_travesal(root);
break;
}
cout<<"\nDo you want to continue?: ";
cin>>ch;
}while(ch == 'y');
return 0;
}
void insertion(){
int data;
cout<<"\nEnter data: ";
cin>>data;
Node* newNode = new Node;
newNode->data = data;
if(root == NULL)
{
root = newNode;
return;
}
else
{
Node* temp = root;
while(true){
if(temp->data > newNode->data)
{
if(temp->left_child == NULL)
{
temp->left_child = newNode;
return;
}
else
{
temp = temp->left_child;
}
}
else
{
if(temp->right_child == NULL)
{
temp->right_child = newNode;
return;
}
else
{
temp = temp->right_child;
}
}
}
}
inorder_travesal(root);
}
void inorder_travesal(Node* temp){
if(temp->left_child != NULL){
inorder_travesal(temp->left_child);
}
cout<<temp->data<<" ";
if(temp->right_child != NULL){
inorder_travesal(temp->right_child);
}
}