Моя функция работает до тех пор, пока элемент меньше и, следовательно, вставлен влево, но когда он должен идти вправо, ничего не происходит. Это не сбой или что-то еще, он просто не делает вставку.Итеративная вставка C++ в двоичное дерево поиска BST
Я не понимаю, как это может произойти, потому что в коде есть только разные символы в любом случае - это слова слева или справа (насколько я могу видеть). Что-нибудь очевидное для кого-то более опытного?
template <typename T>
void BST<T>::insertHelper(BST<T>::BinNodePtr &subRoot, const T& item)
{
BinNode *newNode;
BinNode *parent;
BinNode *child;
newNode = new BinNode;
newNode->data = item;
// newNode->left = NULL;
// newNode->right = NULL;
parent = subRoot;
child = subRoot;
if (!subRoot){
subRoot = newNode;
} else {
if (item < child->data){
child = child->left;
} else if (item > child->data){
child = child->right;
}
while (child){
parent = child;
if (item < child->data){
child = child->left;
} else if (item > child->data){
child = child->right;
}
}
child = newNode;
if (child->data < parent->data)
parent->left = child;
else if (child->data < parent->data)
parent->right = child;
}
}
просто введите некоторые выходные данные 'printf()' debug, чтобы следить за тем, как принимаются решения при каждом 'if', и вы увидите неправильное решение в последнем' if' пункт. – Pavel
если элемент == subRoot-> данные идут в бесконечном цикле. Что такое T в вашем тестовом примере? T имеет оператор сравнения сравнения? – ilmale