特定のレベルのバイナリ ツリーのみを出力するにはどうすればよいか知りたいです。ここで BFS に関する多くの質問を読みましたが、1 レベルだけの印刷については何も見つかりませんでした。
一般的な BFS 検索を印刷に変更するにはどうすればよいですか。たとえば、このツリーのレベル 2 のみを表示します。
6
/ \
4 8
/ \ / \
1 5 7 9
レベル 2 は 1、5、7、9 になります。ありがとうございます。
ノードに level プロパティが必要です。そして、木の上を横断するときは、次のように尋ねます。
if (level == 2) //or whatever level you wish
{
...
}
良い例を次に示します:特定のレベルのバイナリ ツリー内のすべてのノードを検索する (インタビュー クエリ)
ノードにレベルがなく、それを変更できない場合は、チェックを行うメソッドでグローバル変数として作成できます。これは望ましくありませんが、もう 1 つの解決策です。この回答をコードで確認していませんが、解決策に非常に近いはずです。
例えば:
int level = 0;
public void PrintOneLevelBFS(int levelToPrint)
{
Queue q = new Queue();
q.Enqueue(root); //Get the root of the tree to the queue.
while (q.count > 0)
{
level++; //Each iteration goes deeper - maybe the wrong place to add it (but somewhere where the BFS goes left or right - then add one level).
Node node = q.DeQueue();
if (level == levelToPrint)
{
ConsoleWriteLine(node.Value) //Only write the value when you dequeue it
}
if (node.left !=null)
{
q.EnQueue(node.left); //enqueue the left child
}
if (n.right !=null)
{
q.EnQueue(node.right); //enqueue the right child
}
}
}