2

わかりましたので、バイナリ検索ツリーのレベル順トラバーサルを実行しようとしていますが、機能していません。以下のコードは私にとっては理にかなっていますが、それはおそらく、私がそれをずっと見ていて、それが機能するはずだと確信していたからです.

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% 理解しているわけではないからです。

4

1 に答える 1

1

結果に問題はありません。

どうやって 24,12,18 に到着するのか説明できますか?

最初にルート レベルで 12 を挿入し、次にルート 12 の右側のノードになる 24 を挿入し、次に 24 の左側のノードになる 18 を挿入します。 24 より小さいので、24 の右側のノードとして挿入されます

そう:

12


12
  \
  24

12
  \
  24
 /
18

したがって、レベル 1 (12)、レベル 2 (24)、レベル 3 (18) の 3 つのレベルがあるため、アルゴリズムが挿入するレベル トラバーサルは 12,24,18 です。

于 2010-05-02T23:22:35.773 に答える