ホームページ  >  記事  >  バックエンド開発  >  PHP クラス&オブジェクト -- PHP 自己ソート バイナリ ツリーの詳細な分析_PHP チュートリアル

PHP クラス&オブジェクト -- PHP 自己ソート バイナリ ツリーの詳細な分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:03:13735ブラウズ

ノード間にソート ロジックを適用することにより、バイナリ ツリーはノードを整理するための優れた方法を提供します。各ノードについて、指定されたすべての条件を満たす要素が左側のノードとその子に配置されます。新しい要素を挿入するときは、ツリーの最初のノード (ルート ノード) から開始して、それがノードのどちらの側に属するかを決定し、データを読み取るときと同様に、この側に沿った適切な位置を見つける必要があります。バイナリ ツリーをトラバースする順序トラバーサル メソッド。

コードをコピーします コードは次のとおりです:

ob_start();
// ここでバイナリツリークラスを含める必要があります
Class Binary_Tree_Node() {
// 詳細は
}
ob_end_clean();
// を定義します自己ソートバイナリツリーを実装するクラス
class Sorting_Tree {
// ツリーを保持する変数を定義します:
public $tree;
// 自動的に配置する挿入を可能にするメソッドが必要です
// それ自体を適切な順序で配置しますツリー内
public function insert($val) {
// 最初のケースを処理します:
if (!(isset($this->tree))) {
$this->tree = new Binary_Tree_Node($val );
} else {
// その他のすべての場合:
// 現在のツリーのトップを参照するポインターを開始します:
$pointer = $this->tree;
// ツリー内で正しい場所:
for(;;) {
// この値が現在のデータ以下の場合:
if ($val <= $pointer->data) {
//左を見て... 子が存在する場合:
if ($pointer->left) {
// より深くトラバースする:
$pointer = $pointer->left;
} else {
// 新しいスポットを見つけました。ここに新しい要素:
$pointer->left = new Binary_Tree_Node($val);
Break;
}
}
} else {
// 右を見ていきます ... 子が存在する場合:
if ($pointer ->right) {
// より深くトラバースする:
$pointer->right;
} else {
} else { // 新しいスポットを見つけました: ここに新しい要素を挿入します:
$pointer->right = new Binary_Tree_Node($val);
Break;
}
}
}
} 🎜 }

// 次に、このツリーのソートされた値を返すメソッドを作成します。
// これに必要なのは、順序トラバーサルを使用することだけです。これにより、適切なソート順序が得られます。
// public function returnSorted() {
return $this->tree->traverseInorder();
}
}
// 新しい並べ替えツリーを宣言します:
$sort_as_you_go = new Sorting_Tree();
// ランダムに 20 個の数値を作成し、次のように挿入しましょう。 we go:
for ($i = 0; $i $sort_as_you_go->insert(rand(1,100));
}
// 次に、in-order を使用してツリーをエコーアウトします。トラバーサルすると、ソートされます:
// 例: 1、2、11、18、22、26、32、32、34、43、46、47、47、53、60、71、
// 75, 84, 86, 90
echo '

'、implode(', ', $sort_as_you_go->returnSorted())、'

;
?>


http://www.bkjia.com/PHPjc/327866.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327866.html技術記事各ノードについて、特定の条件を満たすすべての要素が左側のノードとその子ノードに配置されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。