3

特定のレベルのバイナリ ツリーのみを出力するにはどうすればよいか知りたいです。ここで BFS に関する多くの質問を読みましたが、1 レベルだけの印刷については何も見つかりませんでした。

一般的な BFS 検索を印刷に変更するにはどうすればよいですか。たとえば、このツリーのレベル 2 のみを表示します。

   6
  / \
 4   8
/ \ / \
1 5 7  9

レベル 2 は 1、5、7、9 になります。ありがとうございます。

4

2 に答える 2

1

ノードに 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
            }
         }
     }
于 2013-10-15T19:54:35.030 に答える