2010-05-02 5 views
2

Итак, я пытаюсь выполнить обход уровня двоичного дерева поиска и его не работает. Код ниже имеет смысл для меня, но это, вероятно, потому, что я смотрел на него навсегда, и я убедил себя, что он должен работать.Обход уровня 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% на всех входах и выходах.

+1

Итак, какие результаты вы получаете и чего вы ожидаете? – stefanB

+0

Ну, если я ввещу что-то подобное в дерево: 12 24 18 .. Выходной сигнал обхода уровня: 12 24 18 .. это неверно. Результат, который я ожидал, равен 24 12 18 –

+0

Является ли 'BST <>' AVL? Если нет, то ваше ожидание ошибочно. Этот вход даст дерево, имеющее три уровня. Если дерево упорядочено по левому краю, вы должны получить дерево, подобное этому: корень равен 12, его левый ребенок равен 24, а его правый ребенок равен NULL; левый ребенок 24 равен NULL, а правый ребенок 24 - 18. – wilhelmtell

ответ

1

В результате нет ничего плохого.

Не могли бы вы объяснить, как вы доберетесь до 24,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 по мере добавления вашего алгоритма.

+0

ahh спасибо! Это имеет смысл ... на самом деле, если бы я только что вытащил его, я бы, наверное, пришел к такому же выводу. Моя проблема заключается в том, что она из лабораторного руководства, и я пришел к выводу, что отображение дерева неверно. –

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