0

質問:ツリー ノードをレベルごとに表示するにはどうすればよいですか? 時間とスペースの効率的な解決策を教えてください。

例 :

    A
   / \
  B   C
 / \  / \
D   E F  G

void PrintTree(struct tree *root);

出力: レベルごとにツリー ノードを出力する必要があります

  A
  B C
  D E F G
4

3 に答える 3

3

SOのスペースと時間を節約するには:

http://thecodecracker.com/c-programming/bfs-and-dfs/

于 2010-11-24T20:10:29.023 に答える
3

あなたが野蛮だと感じていて、自分のレベルについて非常に単純に考えたい場合は
...

  • 2 つのキュー
  • ジャックのアプローチに少しひねりを加えた

したがって、ルートから始めます。
その子を最初のキューに追加します。
それらを通り抜け、子供たちを 2 番目のキューに追加します。
2 番目のキューに切り替え、ステップ スルーして、子を最初のキューにプッシュします。
ワックスオン、ワックスオフ。

実際には、幅優先検索またはスイープという同じアイデアを少し拡張しただけであり、さまざまなデータ構造に適用されるため、パターンとして考える価値があります。実際、ツリーまたはトライであるほとんどすべてのものと、そうでないものもいくつかあります。

于 2010-11-24T20:48:56.947 に答える
2

この種の訪問は、幅優先またはレベル順と呼ばれます。追加情報はこちらでご覧いただけます

基本的にあなた

  • 最初に現在のノードにアクセスする
  • 次に、そのノードのすべての子
  • 次に、すべての子のすべての子など

これは、FIFO 構造を使用して簡単に実現できます。

  • 根を押します
  • キューが空になるまで
  • 最初の要素を取得してアクセスし、そのすべての子をキューの最後にプッシュします
  • 繰り返す
于 2010-11-24T19:44:52.263 に答える