[安全オファーを証明]バイナリツリーを再構築

タイトル説明

そして、再構築したバイナリツリーの先行順走査でバイナリツリーの先行順走査で結果を入力してください。仮定結果先行順走査順序と重複する数字の入力は無料です。例えば、前順走査シーケンス{1,2,4,7,3,5,6,8}及び{4,7,2,1,5,3,8,6}順序トラバーサル順序、及び再構成された二分木に入る前リターン。
溶液:
1  / * *
 2  *バイナリツリーの定義
 3  *構造体のツリーノード{
 4  * int型のヴァル。
5  *のTreeNode *左;
6  *のTreeNode *右;
7  *ツリーノード(INT X):(NULL)左のval(X)、右(NULL){}
 8  *}。
9   * / 
10  クラスソリューション{
 11  公共12      のTreeNode * reConstructBinaryTree(ベクトル< 整数 >予め、ベクトル< INT > VIN){
 13        // 左近い右開き
14        リターン RebuildBST(プリ、VIN、0、pre.size()、0 、vin.size())。
15        
16      }
 17      のTreeNode * RebuildBST(ベクトル< 整数 >予め、ベクトル< INT > VIN、INT preBegin、INT PREEND、INT inBegin、INT inEnd)
 18      {
 19        であれば(preBegin> = PREEND || inBegin> = inEnd)戻りnullptr ;
20        INT rootCur = プレ[preBegin]。
21        ツリーノード*ルート= 新しいツリーノード(rootCur)。
22件       のint rootPos = 0 23       (; rootPos <inEnd; rootPos = inBegin rootPos ++ 24        {
 25          であれば(VIN [rootPos] == rootCur)
 26          {
 27            ブレーク28          }
 29        }
 30        root->左= RebuildBST(プリ、VIN、preBegin + 1、+ preBegin rootPos - inBegin + 1 、inBegin、rootPos)。
31        root->右= RebuildBST(プリ、VIN、preBegin + rootPos - inBegin + 1、PREEND、rootPos + 1 、inEnd)。
32  
33        戻りルート。
34      }
 35 }。
コードの表示

考えます:

  • 予約限定は根、あなたが再帰的にできるように成功し、サブツリー分割しようとして前順後のルートを提供しています。
  • コードのセクションの、均一な適用を生じに関しては「左右の近くを開いて、」プログラムは、問題を単純化します

おすすめ

転載: www.cnblogs.com/Swetchine/p/11291701.html