Вопрос

Хорошо, так что я пытаюсь сделать обход уровня на уровне двоичного поиска и ее не работает. Код ниже имеет смысл для меня, но это, вероятно, потому что я смотрел на это навсегда, и я убедил себя, что он должен работать.

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 в качестве вашего алгоритма.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top