安全性を証明する - バイナリツリーの再構築

バイナリツリーの再構築

そして、バイナリツリーの再構築の先行順走査でのバイナリツリーの先行順走査で結果を入力してください。仮定結果先行順トラバーサル順序と重複する数字の入力は無料です。入射例えばプレオーダートラバーサルシーケンス{1,2,4,7,3,5,6,8}及び{4,7,2,1,5,3,8,6}順序トラバーサル順序、及び再構成された二分木前リターン。


問題解決のアイデア

先行順走査の特性は、最初の数字は、ルートノードを表します。根において見出さ順序トラバーサル順に、ツリーのルートの最初の部分は、右サブツリーに属し、後者は、左の部分木です。

ルートノードは、左サブツリー・ノードの数を決定し、トラバース配列INORDERマークされ、前のシーケンスの先行予約に基づいてノードの右の部分木の数は、左と右の部分木で選択した値をとります。

その後、使用再帰をすることができます。

再帰基本的な状況:二つの配列が空のときにコードがカバーされている、それは基本的な状況です。ヌルを返します。


1  / ** 
2  バイナリツリーの定義*
 3  *パブリッククラスツリーノード{
 4  ; * INTのヴァル
5  *のTreeNodeは左。
6  *のTreeNode右;
7  *ツリーノード(INT X){ヴァル= X。}
 8  *}
 9   * / 
10  インポートjava.util.Arrays。
11  パブリック クラスソリューション{
 12      公共のTreeNode reConstructBinaryTree(INT []予め、INT {[]内)
 13          // 递归基本条件
14          であれば(pre.length == 0 || in.length == 0 15              リターン NULL ;
 16          // 最初のルートノードを決定する
17。          ツリーノードルート= 新しい新しいツリーノードが(PRE [0 ]);
 18である         // ルートシーケンスの先行予約を見つける
19。         ためにINT I = 0; I <in.length。 ++ I ){
 20は             IF([I] == [0を予備]){
 21は                  root.left = reConstructBinaryTree(
 22は                      Arrays.copyOfRange(I +、,. 1を事前。1)、Arrays.copyOfRange(0、で、I )
 23である                 );
 24                  root.right = reConstructBinaryTree(
 25                     Arrays.copyOfRange(前、私は+ 1、pre.length)、Arrays.copyOfRangeは、(i + 1、で、in.length)
 26                  );
 27                  BREAK ; // なぜなら、より安全を感じることなく、ほぼ思えるしました私が知りたい
28              }
 29          }
 30          リターンルートを;
 31      }
 32 }

 

 

おすすめ

転載: www.cnblogs.com/peekapoo/p/12099207.html