PTAツリートラバーサル

 
前順走査順に与えられたバイナリツリーと、あなたはシーケンスをトラバーサル出力シーケンスの後。キーが相互に等しくない正の整数であることが想定されます。
入力フォーマット:
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-を12 * P +1); // トラバース右サブツリー
23 }

 

おすすめ

転載: www.cnblogs.com/chunbuhan/p/11917342.html