バイナリツリーの提供(PHPのバージョンは書き換え)----再建を受賞

そして、再構築したバイナリツリーの先行順走査でバイナリツリーの先行順走査で結果を入力してください。仮定結果先行順走査順序と重複する数字の入力は無料です。
例えば、前順走査シーケンス{1,2,4,7,3,5,6,8}及び{4,7,2,1,5,3,8,6}順序トラバーサル順序、及び再構成された二分木に入る前リターン。
ツリーノード{クラス
変数$ヴァル、
変数$左= NULL;
VAR $右= NULL;
__construct機能(ヴァル$){
の$ this - > = $ヴァルヴァル;
}
}
方法:PHPを使用せずにビルトイン方式
関数reConstructBinaryTree($プレ、$ VIN)
{
//ここにコードを記述壁紙
リターンビルド(前$、$ VIN、0、COUNT($前)-1、0、COUNT($のVIN)-1);
}

関数ビルド(前$、$順序どおり、 PSTART $、$ PEND、ISTART $、$ IEND){

IF(PSTART $> $ $ ISTART PEND ||> $ IEND){
リターン;
}
$ $ =ルート事前[$ PSTART];
//ルートノードは、シーケンスで取得しますトラバーサル添字
以下のために($見つける= $ ISTART; $見つける<= $ IEND; $ ++見つける。){
IF($ルート== $ INORDER [$検索]){
破ります。
}
}

$ LEN = $検索- $ ISTART。
$ resを=新しいのTreeNode($の根);
$ RES-> =ビルド($前、$ inorderを、$ PSTART + 1、$ PSTART + $ LEN、$のISTART、$見つける-1)を左に。
$ RES->右=ビルド($前、$ inorderを、$ PSTART + $ lenを+ 1、$の保留、$見つける+ 1、COUNT($ INORDER)-1)。
$ RESを返します。
}

$プリ= [1,2,4,7,3,5,6,8]。
$のVIN = [4,7,2,1,5,3,8,6]。
しますprint_r(reConstructBinaryTree($の前、$のVIN));
方法2:使用してPHPの組み込みメソッドがarray_search、array_slice
関数reConstructBinaryTree($プリ、$のVIN)
{
//書き込みコードここで
あれば($ && $ VinをPRE){
$ treeRoot =新しいツリーノード($予め[0])。
$インデックス= array_search($ [0]、$ VinをPRE)。
$ treeRoot->左= reConstructBinaryTree(array_slice($プリ、1、$インデックス)、array_slice($ Vinは、0、$インデックス))。
$ treeRoot->右= reConstructBinaryTree(array_slice($プリ、$インデックス+ 1)、array_slice($のVIN、$インデックス+ 1))。
リターン$ treeRoot。
}
}

おすすめ

転載: www.cnblogs.com/cyworz/p/11225263.html