二分探索ツリーを実装する 1 つの方法は、リンク リストを使用することです。リンク リストは、物理ストレージ ユニット上の非連続かつ非順次のストレージ構造です。データ要素の論理順序は、次の方法でリンクされます。リンク リスト内のポインタ。これは順次実装され、リンク リストは一連のノードで構成され、ノードは実行時に動的に生成できます。
二分探索ツリー
二分探索ツリーは、便利な特別な二分木のペアです。並べ替えと検索用
#定義: 左サブツリー< ルート ノード< 右サブツリー
実装方法: 通常、リンク リストを使用して
操作セットを実装します。バイナリ ツリー、空かどうかの判断、トラバース、検索、最小要素の検索、最大要素の検索、挿入、削除
時間計算量: bestO(logN)
worst O(N)
関連紹介:
リンク リストは、物理ストレージ ユニット上の非連続かつ非順次のストレージ構造です。データ要素の論理順序は次のとおりです。リンクされたリストを通じて、ポインタのリンク順序が実装されます。リンク リストは一連のノードで構成され (リンク リストの各要素はノードと呼ばれます)、ノードは実行時に動的に生成できます。各ノードは 2 つの部分で構成されます。1 つはデータ要素を格納するデータ フィールドで、もう 1 つは次のノードのアドレスを格納するポインタ フィールドです。線形テーブルシーケンス構造と比較すると、演算が複雑になります。順序どおりに格納する必要がないため、リンク リストは挿入時に O(1) の複雑さを実現できます。これは、別の線形リストや逐次リストよりもはるかに高速ですが、ノードの検索や特定の番号付きノードへのアクセスには O(n ) 時間、線形テーブルと逐次テーブルの対応する時間計算量はそれぞれ O(logn) と O(1) です。
リンク リスト構造を使用すると、データ サイズを事前に知る必要があるという配列リンク リストの欠点を克服でき、コンピュータのメモリ空間を最大限に活用し、柔軟な動的メモリ管理を実現できます。 。しかし、リンクリストは配列のランダム読み取りの利点を失い、同時にノードのポインタフィールドの増加によりリンクリストのスペースオーバーヘッドが比較的大きくなります。リンク リストの最も明白な利点は、通常の配列で関連する項目を配置する方法が、これらのデータ項目がメモリまたはディスク上で配置される順序とは異なる場合があり、データへのアクセスには、多くの場合、異なる配置間の切り替えが必要になることです。リンク リストでは、リスト上の任意の場所でノードの挿入と削除が可能ですが、ランダム アクセスは許可されません。リンク リストには、一方向リンク リスト、二重リンク リスト、循環リンク リストなど、さまざまな種類があります。リンク リストは、さまざまなプログラミング言語で実装できます。 Lisp や Scheme などの言語の組み込みデータ型には、リンク リストへのアクセスと操作が含まれます。 C、C、Java などのプログラミング言語やオブジェクト指向言語は、リンク リストを生成するために可変ツールに依存しています。
以上が二分探索ツリーを実装するにはいくつかの方法がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。