2014-05-13 4 views
1

Моя функция работает до тех пор, пока элемент меньше и, следовательно, вставлен влево, но когда он должен идти вправо, ничего не происходит. Это не сбой или что-то еще, он просто не делает вставку.Итеративная вставка 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; 
    } 
} 
+0

просто введите некоторые выходные данные 'printf()' debug, чтобы следить за тем, как принимаются решения при каждом 'if', и вы увидите неправильное решение в последнем' if' пункт. – Pavel

+0

если элемент == subRoot-> данные идут в бесконечном цикле. Что такое T в вашем тестовом примере? T имеет оператор сравнения сравнения? – ilmale

ответ

3

Ваши последние «если» и «еще если» имеют одинаковое условие. Второй должен быть '>'

Смежные вопросы