バイナリツリー内のすべてのキーが明確な正の整数であると仮定します。先行順とトラバーサルシーケンス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 旅行(0、0、N - 1 )。 36 // COUT <<後順[0] << ENDL。 37 リターン 0 。 38 }