PATグレード--A1138後順Traversaの[25]

バイナリツリー内のすべてのキーが明確な正の整数であると仮定します。先行順とトラバーサルシーケンスINORDERを考えると、あなたは出力に対応するバイナリツリーの後順トラバーサルシーケンスの最初の数を想定しています。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、正の整数(N与える50,000≤)、バイナリツリー内のノードの総数。2行目は先行順シーケンスを与え、三行目はINORDERシーケンスを与えます。行のすべての数字は、スペースで区切られます。

出力仕様:

各テストケースのために、一列に対応するバイナリツリーの後順トラバーサルシーケンスの最初の番号を印刷します。

サンプル入力:

7
1 2 3 4 5 6 7
2 3 1 5 4 7 6

サンプル出力:

3

既知の配列、得られたプリアンブルシーケンスに
直ちに剪定後の最初の出力シーケンス番号の後、複雑さを低減
1つの#include <iostreamの>
 2の#include <ベクトル>
 3。 使用した 名前空間STD;
 4  int型N-、NUM;
 5  BOOLフラグに= falseに図6のベクトル< INT > プレオーダー、順序どおり、後順;
 7  ボイドトラベル(INT根、int型の L、INT R&LT)// トラバーサルINORDER L、R&LTは、最初のポイントの前順走査のルートである
8。 {
 9。     IF(L> R&LT || フラグに)
 10          リターン;
 11      int型 I = L;
 12であります     しばらく(INORDER [I]は=予約限定[ルート]!)++ I;
 13である      旅行(ルート+ 1。、L、I - 1。); // 左のサブツリー注文トラバース
14      トラベル(ルート+ 1 + I - L、I + 1、R&LT); // 左サブツリー順トラバース
 15      // postOrder.push_back(プレオーダー[ルート]); // 完了後順得る
16を     IF!フラグには、()// 出力を整理する
17      {
 18          <<プレオーダーCOUT [ルート] << ENDL;
 19          フラグに= trueに;
 20      }
 21です }
22  のint main()の
 23  {
 24      CIN >> N。
25      のためにint型 I = 0 ; iがN <++ I)
 26      {
 27          CIN >> NUM。
28          preOrder.push_back(NUM)。
29      }
 30      のためのint型 i = 0 ; iがn <; ++ I)
 31      {
 32          CIN >> NUM。
33          inOrder.push_back(NUM)。
34      }
 35      旅行(00、N - 1 )。
36      // COUT <<後順[0] << ENDL。
37      リターン 0 38 }

 

おすすめ

転載: www.cnblogs.com/zzw1024/p/11494396.html