Мне дали задание создать метод класса Binary Search Tree для вставки элементов в нужное место в дереве. Объявление этой функции:
void BST::insert(int k)
{
}
Может кто-нибудь объяснить, почему узел root не задан в качестве параметра? Как я могу пройти по дереву, когда у меня нет его узла root? Наличие возвращаемого типа void намекает на использование ключевого слова "this"
. Я попытался реализовать следующее:
void BST::insert(int k) {
while(this->root != NULL) {
if(k < this->root->value) {
this->root = this->root->leftChild;
} else {
this->root = this->root->rightChild;
}
}
this->root = new node(k);
}
Это дополнительный OOP код:
struct node {
int value;
node* parent;
node* leftChild;
node* rightChild;
node (int);
int dessiner(ofstream&, int);
};
class BST {
public:
node* root;
BST();
void dessiner(string);
void swap(node*, node*);
void inserer(int);
};
РЕДАКТИРОВАТЬ: я добавил 2 указателя. tmp для обхода дерева и P для отслеживания родительского узла tmp
node* tmp = this->root;
node* p = NULL;
while(tmp!=NULL) {
p = tmp;
if(k < tmp->value) {
tmp = tmp->leftChild;
} else {
tmp = tmp->rightChild;
}
}
tmp = new node(k);
tmp->parent = p;