Я новичок в C++, и я обычно использую Java, поэтому мне сложно найти указатели и ссылки. Я должен сделать вариацию двоичного дерева поиска с внутренними узлами и листовыми узлами (только листья содержат данные).Понимание указателей в двоичном дереве
class Node
Node *parent;
Node *left;
Node *right;
//other stuff
}
Мне нужно реализовать operator<<
, который добавляет новый узел со значением к дереву.
//adding a node to tree
void operator<<(int value){
if(size == 0){
//stuff
} else {
Node* temp = root;
getLeaf(temp,value);
//other magic
//temp will be used to append a new node into tree,
//so it has to point to the actual node in the tree
delete temp;
}
}
Точка функции getLeaf
, чтобы найти лист (может или не может содержать нужный value
) и хранить его в temp
, который должен быть доступен в функции operator<<
.
int getLeaf(Node* temp, int value) const{
int depth = 0;
//goes trough all inner nodes until it finds specific leaf
while(temp->isInner()){
++depth;
if(value < temp->getValue()){ //searched value is smaller
temp = temp->getLeft(); // to left subtree
continue;
} else {
temp = temp->getRight(); //to rightsubtree
continue;
}
return depth;
}
Я действительно смущен, как это сделать, и правильная комбинация указателей и значений. Если я устанавливаю
Node* temp = root;
getLeaf(temp,value);
не корневая получить переопределены при обходе дерева в getLeaf
функции?
Плюс Мне нужно temp
, чтобы указать на фактический узел в дереве, поэтому я могу добавить в него новый узел.
Не могли бы вы объяснить?
В чем причина нисходящего потока? –
Этот вопрос очень специфичен для вашей проблемы, поэтому трудно ответить полезным способом для кого-то еще ... Но я думаю, что ваш 'getLeaf' должен взять ссылку на указатель (' Node * & ', чтобы фактический значение «temp» может быть обновлено в исходном коде вызывающего абонента. –
(я не спускал вниз, но я могу понять, почему кто-то был бы - ваш код также недостаточно полно, чтобы проверить, можем ли мы заставить его работать) –