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, даже если они действительно находятся в допустимых местах памяти, к которым я могу получить доступ.

Кто-нибудь может дать мне какие-либо указания относительно того, что я могу делать неправильно?

Ответы на вопрос(2)

Ваш ответ на вопрос