タイトル説明
そして、再構築したバイナリツリーの先行順走査でバイナリツリーの先行順走査で結果を入力してください。仮定結果先行順走査順序と重複する数字の入力は無料です。例えば、前順走査シーケンス{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 }。
考えます:
- 予約限定は根、あなたが再帰的にできるように成功し、サブツリー分割しようとして前順後のルートを提供しています。
- コードのセクションの、均一な適用を生じに関しては「左右の近くを開いて、」プログラムは、問題を単純化します