Итак, я пытаюсь выполнить обход уровня двоичного дерева поиска и его не работает. Код ниже имеет смысл для меня, но это, вероятно, потому, что я смотрел на него навсегда, и я убедил себя, что он должен работать.Обход уровня BST
void BST<T>::levelByLevel(ostream &out) {
Queue<BinNodePointer> q;
BinNodePointer subtreeRoot;
if(myRoot == NULL)
return;
q.enqueue(myRoot);
while(!q.empty()) {
subtreeRoot = q.front();
out << subtreeRoot->data << " ";
q.dequeue();
if(subtreeRoot->left != NULL)
q.enqueue(subtreeRoot->left);
if(subtreeRoot->right != NULL)
q.enqueue(subtreeRoot->right);
}
}
Может быть, вы, ребята могли бы указать на то, что я делаю неправильно, потому что, хотя я понимаю понятие бинарного дерева поиска, я не 100% на всех входах и выходах.
Итак, какие результаты вы получаете и чего вы ожидаете? – stefanB
Ну, если я ввещу что-то подобное в дерево: 12 24 18 .. Выходной сигнал обхода уровня: 12 24 18 .. это неверно. Результат, который я ожидал, равен 24 12 18 –
Является ли 'BST <>' AVL? Если нет, то ваше ожидание ошибочно. Этот вход даст дерево, имеющее три уровня. Если дерево упорядочено по левому краю, вы должны получить дерево, подобное этому: корень равен 12, его левый ребенок равен 24, а его правый ребенок равен NULL; левый ребенок 24 равен NULL, а правый ребенок 24 - 18. – wilhelmtell