ソース:
説明:
INORDERバイナリツリートラバーサルは、スタックと非再帰的な方法で実施することができます。例えば、(1から6までの番号キーを使用して)6-ノードバイナリツリーがトラバースされるときに、スタック操作であると仮定する:プッシュ(1)。プッシュ(2)。プッシュ(3)。ポップ(); ポップ(); プッシュ(4)。ポップ(); ポップ(); プッシュ(5)。プッシュ(6)。ポップ(); ポップ()。次いで、(図1に示される)固有のバイナリツリーは、この一連の動作から生成することができます。あなたの仕事は、この木の後順トラバーサル順序を与えることです。
図1
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、正の整数含ま N(ツリー内のノードの総数である(したがって、ノードは1から番号が付けられている≤) N)を。次に 2行は、それぞれのフォーマットでスタック操作を説明し、次のとおりXはスタックにプッシュされているノードのインデックスである「Xプッシュ」。またはスタックから一つのノードをポップするために意味する「ポップ」。
出力仕様:
各テストケースのために、一列に対応するツリーの後順トラバーサル順序を印刷します。解決策が存在することが保証されています。すべての数値は正確に一つのスペースで区切らなければならず、行の最後に余分なスペースがあってはなりません。
サンプル入力:
6 Push 1 Push 2 Push 3 Pop Pop Push 4 Pop Pop Push 5 Push 6 Pop Pop
サンプル出力:
3 4 2 6 5 1
キー:
コード:
。1 / * 2 時間:2019年6月30日14時34分48秒 。3 問題:ツリー#PAT_A1086再びトラバース 。4 AC:24:16 。5 。6 効果の対象は: 7の スタックとスタック横断操作、印刷を与えます後順 8。 9つの。 基本的な考え方: 10 二分木シミュレーションを横断する、プッシュサブツリーが存在する、ポップツリーが空である 。11 * / 12であるの#include <cstdioを> 13であるの#include < ストリング > 14の#include <iostreamの> 15 使用 名前空間STD ; 16 INT N-; 17 18は、 無効(順序どおりに) 19。 { 20は、 文字列オペアンプ; 21 int型のデータ。 22 cinを>> オペアンプ。 23 であれば(OP == " プッシュ" ) 24 のscanf(" %d個"、&データ)。 25 他の 26 のリターン。 27 静的 INT PT = 0 。 28 順序どおり()。 29 順序どおり()。 30 のprintf(" %d個の%のC "、データ、++ PT == N?' \ n ':' ' )。 31 } 32 33 のint main()の 34 { 35 の#ifdef ONLINE_JUDGE 36 の#else 37 freopenは(" Test.txtを"、" R " 、STDIN)。 38 #endifの // ONLINE_JUDGE 39 40 のscanf(" %d個"、&N) 41 順序どおり()。 42 43 リターン 0 。 44 }