BST вставить в C ++
Я изучаю C ++ и пишу двоичное дерево поиска. Ниже приведен код, который я написал для моего метода вставки.
BSTNode * BST::Insert(const std::string & v) {
BSTNode *n = !root ? root = new BSTNode(v) : Insert_Helper(v,root);
if(n) size++;
return n;
}
BSTNode * BST::Insert_Helper(const std::string & v, BSTNode *n) {
if(!n->value.compare(v))
return NULL; // already have v
else if(n->value.compare(v) > 0) // v goes to the left
if(n->left) return Insert_Helper(v,n->left);
else return n->left = new BSTNode(v);
else // v goes to the right
if(n->right) Insert_Helper(v,n->right);
else return n->right = new BSTNode(v);
}
Ошибка яПолучается так: все работает отлично, пока я не попытаюсь вставить дубликат узла. Это неДобавить новый узел, но при этом он увеличивается.
Наблюдая в ГБД, ямы обнаружили, что когда я пытаюсь добавить строку, которая у меня уже есть,Insert_Helper
работает правильно и возвращает NULL. Однако это значение (на моей машине) примерно равно 0x6, что, конечно, выходит за пределы, но не 0x0, как я думал. Я думаю, что это вызывает проблему в тот момент, когда у меня есть оператор if (n). В этом случае n оценивается как true, и поэтому увеличивает размер на единицу больше, чем следует.
Кроме того, в этот момент в моей программе узлы продолжают правильно добавляться, но моя функция вставки продолжает возвращать адрес 0x6, даже если они действительно находятся в допустимых местах памяти, к которым я могу получить доступ.
Кто-нибудь может дать мне какие-либо указания относительно того, что я могу делать неправильно?