バイナリツリートラバーサル三共通しています。予約限定(ABC)、先行順(BAC)、帰りがけ順(BCA)
予約限定:
バイナリツリーは、空空の場合、そうでない場合:
- アクセスルートノード。
- 左のサブツリーを前順。
- 右のサブツリーを前順。
予約限定:
バイナリツリーは、空空の場合、そうでない場合:
- 左のサブツリーを前順。
- アクセスルートノード。
- 右のサブツリーを前順。
後順:
バイナリツリーは、空空の場合、そうでない場合:
- 左の部分木の順序を横断した後、
- 右のサブツリーを後順。
- 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 }