プリアンブルシーケンスとそれに続くバイナリ配列の配列における配列を取得します。

バイナリツリートラバーサル三共通しています。予約限定(ABC)、先行順(BAC)、帰りがけ順(BCA)

 予約限定:

   バイナリツリーは、空空の場合、そうでない場合:

  1. アクセスルートノード。
  2. 左のサブツリーを前順。
  3. 右のサブツリーを前順。

 予約限定:

   バイナリツリーは、空空の場合、そうでない場合:

  1. 左のサブツリーを前順。
  2. アクセスルートノード。
  3. 右のサブツリーを前順。

 後順:

   バイナリツリーは、空空の場合、そうでない場合:

  1. 左の部分木の順序を横断した後、
  2. 右のサブツリーを後順。
  3. rootアクセス。

学習でバイナリツリートラバーサル順序に従って決定され、知っている:一意のバイナリにより、または第1の2値ツリートラバーサルシーケンス後に同定することができます。

説明は、コード・シーケンスを得るために、Javaコードトラバーサルシーケンスの先行順走査に基づくアルゴリズムを使用しています。

1  パッケージlearn.normalcode;
 2  
。3  インポートjava.util.ArrayListのの、
 4  
。5  パブリック クラスBlankD {
 6      パブリック 静的のArrayList <文字> = ansList 新しい新規のArrayList <>(11 );
 7      // 配列とバイナリツリーの後続のシーケンスによってで収集シーケンスモチーフ配列の前に
。8      パブリック 静的な 無効getAns(中列、文字列バック){
 。9          // 最後のシーケンスは、シーケンスノードがルートノードされた後
10          int型 backLength back.length =()、= middleLength middle.length() ;
 11          チャーは、 Cの= '#' ;
 12は、         IF(backLength> 0 ){
 13は              C = back.charAt(backLength - 1。);
 14              ansList.add(C);
 15  
16              //は、後続の配列が左右のサブツリー/後続配列を分割/そこ
17。             int型 indexOfRootを= middle.indexOf(C)
 18は              getAns(middle.substring(0、indexOfRoot)、back.substring(0 、indexOfRoot));
 19              getAns(middle.substring(+ indexOfRoot 1、middleLength)、back.substring(indexOfRoot、。 backLength - 1 ));
 20である         }
 21は         戻り22は 
23である     }
 24      パブリック 静的 ボイドメイン(文字列[]引数){
 25          列= "SMBDCEAFHG"、バック= "MSDECBHGFA"ミドル26          getAns(中央、背面)。
27          のSystem.out.println(ansList)。
28  
29          ansList.clear()。
30          中央= "DCBA" 31          バック= "DCBA" 32          getAns(中央、背面)。
33          のSystem.out.println(ansList)。
34  
35          ansList.clear()。
36          = "SMBDCEA"ミドル37          バック= "MSDECBA" 38          getAns(中央、背面)。
39          のSystem.out.println(ansList)。
40      }
 41 }

 

おすすめ

転載: www.cnblogs.com/orzt/p/11529865.html