PATグレード--A1020ツリー全検索

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

入力仕様:

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

出力仕様:

各テストケースのために、一列に対応するバイナリツリーのレベル順トラバーサル順序を印刷します。行のすべての数字は正確に一つのスペースで区切らなければならず、行の最後に余分なスペースがあってはなりません。

サンプル入力:

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

サンプル出力:

4 1 6 3 5 7 2


既知の先行順走査順序と出力層の前順

1の#include <iostreamの>
 2の#include <キュー>
 3。 使用した 名前空間STD;
 4  INT * POS、ORD *; // ストレージおよび配列先行順データの後
5  構造体ノード
 6  {
 7。     INT ヴァル;
 8      ノードのL *、* R&LT;
 9。      ノード(INT A = 0 ):ヴァル(A)、L(nullptr A)は、R(nullptr A){}
 10  };
 11ノード* createTree(INT POSL、INT POSR、INT ordL、INT ORDR)
 12は、 {
 13れます     IF(POSL> POSR)
 14          リターンnullptr;
 15      ノード* =ルート新しい新しいノード();
 16      ディレクトリroot->ヴァルPOS = [POSR]; // ルート値
17。     int型のK;
 18である     ため(K = ordL; K <= ORDR; ++ K)が
 19      {
 20          IF(ORD [K] == POS [POSR])// 元見つけるためにツリーのルート
21は             BREAK 22である     }
 23は、     INT ; - ordL numL = K // 左側のサブツリーノードの数
 24      // 再帰的な建設左のサブツリー
25      ディレクトリroot-> L = createTree(POSL、POSL + numL -。1、ordL、K - 1。);
 26である     // 右の部分木の再帰構造
27      ディレクトリroot-> = R&LT createTree(POSL + numL、POSR - 1、K + 1、ORDR); // ルートを削除し
28      の戻りルートを、
 29  }
 30  空隙 getResBFS(ノード* ルート)
 31である {
 32      キュー<ノード*> Q;
 33である      P = *ノードnullptr A;
 34である     q.push(ルート);
 35      COUT <<ディレクトリroot-> ヴァル;
 36      ながら(!q.empty ())
 37      {
 38         P = q.front()。
39          もし(!P = ルート)
 40              はcout << "  " << P-> valの;
41          q.pop()。
42          であれば(P-> L =!nullptr)
 43              q.push(P-> L)。
44          であれば(P-> R =!nullptr)
 45              q.push(P-> R)
46      }
 47      COUT << ENDL。
48  }
 49  
50  のint main()の
 51  {
 52      INT N。
53     cinを>> N。
54台の      POS = 新しい INT [N]。
55      ORD = 新しい INT [N]。
56      のためにint型 I = 0 ; iがNを<; ++ I)
 57          CIN >> POS [I]。
58      のためにint型 I = 0 ; iがNを<; ++ I)
 59          CIN >> ORD [I]。
60      ノード*ルート= createTree(0、N - 10、N - 1 )。
61      getResBFS(ルート)。
62      リターン 0 ;    
63 }

 

おすすめ

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