Как я могу отладить свое двоичное дерево поиска C ++? - PullRequest
0 голосов
/ 06 мая 2020

Я не могу понять этого. Мое дерево поиска сохраняет только первую запись из входного списка. Я хочу создавать предварительные, встроенные и пост-обходы вместе с некоторыми другими функциями (это будет сделано после того, как я исправлю этот беспорядок).

Есть много решений, но я хочу стать лучше, поэтому я хочу чтобы узнать, что не так с тем, что я сделал.

1 Ответ

3 голосов
/ 06 мая 2020

В вашей функции добавления узла

 if(subtree->getEntry() > entry.getID()){
    if(subtree->getRight()!=nullptr){
       add(entry,subtree->getRight());
    }
    else{
        BSNode<ItemType>* n= new BSNode<ItemType>(entry);
        subtree->setRight(n);
    }
}
else if(subtree->getEntry() < entry.getID()){
    if(subtree->getLeft()!=nullptr){
       add(entry, subtree->getLeft());
    }
    else{
        BSNode<ItemType>* n= new BSNode<ItemType>(entry);
        subtree->setLeft(n);
    }
}

Ход go вправо , когда ID для добавления меньше, чем ID текущего узла.

С другой стороны стороны, в вашей функции поиска узлов

if(subtree->getEntry() > key){
    return(search(key, subtree->getLeft()));
}
else{
    return(search(key, subtree->getRight()));
}

Переход go влево , когда идентификатор для поиска меньше идентификатора текущего узла.

Это несоответствие предотвращает Идентификаторы узлов, отличных от root (1-й в списке), не найдены.

Вы должны инвертировать любой вариант, чтобы решить эту проблему.

...