Вопрос
Хорошо, так что я пытаюсь сделать обход уровня на уровне двоичного поиска и ее не работает. Код ниже имеет смысл для меня, но это, вероятно, потому что я смотрел на это навсегда, и я убедил себя, что он должен работать.
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% на всех и аутах.
Решение
В результате нет ничего плохого.
Можете ли вы объяснить, как вы прибываете в 24 12,12,18?
Я предполагаю, что вы вкладываете 12 сначала на корневом уровне, вы вкладываете 24, которые заканчиваются в виде правого узла корня 12, вы вкладываете 18, которые заканчиваются как левый узел 24 - потому что 18 - это, то корня 12, так что идет прямо, то 18 менее 24, так что он вставлен в виде правого узла 24
Так:
12
12
\
24
12
\
24
/
18
Таким образом, у вас есть 3 уровня, уровень 1 (12), уровень 2 (24), уровень 3 (18) настолько проездной на уровне 12,24,18 в качестве вашего алгоритма.