前順走査順に与えられたバイナリツリーと、あなたはシーケンスをトラバーサル出力シーケンスの後。キーが相互に等しくない正の整数であることが想定されます。入力フォーマット:
N(≤30)整数最初の行の正の入力を与えられたが、バイナリツリー内のノードの数です。2行目は、その後、シーケンスの先行順を提供します。第3の行は、配列先行予約を与えます。数字の間のスペースで区切られています。出力フォーマット:
行にツリーをトラバース出力シーケンス層。スペースで区切られた数字の間には、最初から最後までのラインは、余分なスペースを持っていないかもしれません。サンプル入力:
7
2 7 6 5 4 3 1
。1 5 4 3 2 6 7
出力サンプル:
4163572
アナログ二分木を持つ配列、ルートノードは集合Nであり、左側の子を2Nの番号を付け、右側の子は、このように出力を順次バイナリツリートラバーサル順に格納され、2N + 1の番号が付け。ここで、アレイの定義だと、サブ再帰、アレイ内の適切な場所にルート・ノードのルートノードを探し続けています。
1 // 0からインデックス 2 // POST [] []で、既知の配列を通過した後の要素は先行順要素として知られている 。3 // lenの-1 POST []根瘤に渡します要素の数はに(すなわち左右のサブツリー)サブとして指数、lenの再帰関数を指す 。4 // P NUMルート格納場所[]、即ち左右の子ノードは、サブ再帰のルートとなる 。5 // P開始位置である。1 。6 ボイド LEVELORDER(INT POST []、INT には []、INT LEN、int型のP) 。7 { 8 のiF(LEN < 1) // どの要素サブツリーが存在しない、リターン 9 { 10 NUM [ P] = - 1。; 11。 リターン; 12である } 13は、 14 INT Iは= 0 ; 15 // LEN再帰関数この1 NUM []配列インデックスのルートノードに格納される。 16 // 予約限定要素で、ルートを探しI、左サブツリーが左右右サブツリーである位置 17。 一方、(POSTは、[lenを1 ] =!における [I])I ++ ; 18である 。19 NUM [P] = POST [lenの1。]; 20 21は LEVELORDER(POST、で lenは、I、2 ; * P) // トラバース左サブツリー 22は LEVELORDER(I + POST、で + I + 1、lenの-I-を1、2 * P +1); // トラバース右サブツリー 23 }