バイナリツリートラバーサル非再帰

バイナリツリートラバーサル非再帰

達成するためにスタックを使用して、非再帰的なバイナリツリートラバーサル

  • 順序で始まることだったので、あなたはノード遭遇にアクセスする必要があり、次のステップは、ツリーの左側の枝に沿って下流でなければなりません。
  • しかし、ノードや枝が訪問したので、記録する必要がある、とスタックにノードなかったです。
  • ヌルツリーがバックトレースされ、それを横断するように、バイナリツリーのように、スタックや枝を取り除きます。

コード:

1  DEF :(T、PROC)プレオーダー
 2つの      S = スタック()
 3      ながら tはありません ではないいずれか、ない)(s.is_empty:
 4          ながら tはありません ないなし:
 5              PROC(t.data)
 6              場合t.right。
 7                  s.push(t.right)
 8              T = t.left
 9          T = s.pop()

 ジェネレータ関数を横断

データ収集構造を考慮すると、Pythonでプログラムを書くとき、常にイテレータを考える必要があります。以下は、バイナリツリーのイテレータを訪れ非再帰的な実装です。

1  DEF (T)プレオーダー:
 2      秒= スタック()
 3      ながら tはありません ではないいずれか、 しないs.is_empty():
 4          ながら tはありません ないなし:
 5              であれば:t.right
 6                  s.push(t.right)
 7              収率t.data
 8              T = t.left
 9          T = s.pop()

 

おすすめ

転載: www.cnblogs.com/yang-he/p/11411961.html