Я изучаю двоичные деревья и хочу реализовать с помощью ООП, где у меня есть struct Node
, и создать объект BST.Я пытаюсь создать функцию вставки с этим подходом и сталкиваюсь с проблемой, когда я не могу рекурсивно пройти по дереву, чтобы добавить новый узел - то есть, если я не перегружаю метод, по сути копируя его, чтобы вызвать новыйметод с указателем на left
или right
.Трудно объяснить, но сейчас у меня есть два метода, и я не уверен, что я упускаю что-то очевидное, чтобы просто иметь 1 метод с 1 параметром int data
, или этот подход просто не верен.Я чувствую, что здесь есть чему поучиться.Большое спасибо.
#include <iostream>
struct Node
{
Node *right;
Node *left;
int data;
};
class BST
{
public:
Node* root;
public:
BST()
:root(NULL)
{
}
//inserts node taking parameter data
Node* insertNode(int data)
{
//if tree is empty, create root
if (root == NULL)
{
root = newNode(data);
}
//if data is smaller than or equal to root, insert left
else if (data <= root->data)
{
root->left = insertNode(root->left, data);
}
//data is larger than root, insert right
else
{
root->right = insertNode(root->right, data);
}
return root;
}
//inserts new node
Node* insertNode(Node *root, int data)
{
//if tree is empty, create root
if (root == NULL)
{
root = newNode(data);
}
//if data is smaller than or equal to root, insert left
else if (data <= root->data)
{
root->left = insertNode(root->left, data);
}
//data is larger than root, insert right
else
{
root->right = insertNode(root->right, data);
}
return root;
}
Node* newNode(int data)
{
Node *temp = new Node;
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
};
int main() {
BST bst1;
bst1.insertNode(30);
bst1.insertNode(15);
return 0;
}