導入
二分探索ツリー (BST) は、各ノードが最大 2 つの子 (左の子と右の子と呼ばれます) を持つバイナリ ツリーの一種です。各ノードについて、左側のサブツリーにはノードの値より小さい値を持つノードのみが含まれ、右側のサブツリーにはノードの値より大きい値を持つノードのみが含まれます。 BST は、効率的な検索、挿入、削除操作に使用されます。
二分探索ツリーを使用する理由
BST にはいくつかの利点があります:
効率的な検索: 検索、挿入、削除の平均時間計算量は O(log n) です。
項目の動的セット: 静的配列とは異なり、動的操作をサポートします。
順序付けされた要素: BST を順番に走査すると、並べ替えられた順序で要素が得られます。
BST を構築するためのステップバイステップ ガイド
ステップ 1: ノード構造を定義する
最初のステップは、ツリー内のノードの構造を定義することです。各ノードには、値、左の子への参照、右の子への参照という 3 つの属性があります。
public class TreeNode { int value; TreeNode left; TreeNode right; TreeNode(int value) { this.value = value; this.left = null; this.right = null; } }
ステップ 2: コンストラクターを使用して BST クラスを作成する
次に、ツリーのルートへの参照と要素を挿入するメソッドを含む BST クラスを作成します。
public class BinarySearchTree { TreeNode root; public BinarySearchTree() { this.root = null; } }
ステップ 3: 挿入メソッドを実装する
BST に要素を挿入するには、新しいノードの正しい位置を見つける必要があります。挿入メソッドは通常、再帰関数として実装されます。
public void insert(int value) { root = insertRec(root, value); } private TreeNode insertRec(TreeNode root, int value) { // Base case: if the tree is empty, return a new node if (root == null) { root = new TreeNode(value); return root; } // Otherwise, recur down the tree if (value root.value) { root.right = insertRec(root.right, value); } // Return the (unchanged) node pointer return root; }
視覚化
挿入がどのように機能するかをよりよく理解するために、例を考えてみましょう。次の数値シーケンスを BST に挿入するとします: 50、30、70、20、40、60、80。
50
50 / 30
50 / \ 30 70
50 / \ 30 70 /
40 を挿入:
50 / \ 30 70 / \
60を挿入
50 / \ 30 70 / \ /
80 を挿入:
50 / \ 30 70 / \ / \
完全なコード
BST を作成して要素を挿入するための完全なコードは次のとおりです:
public class BinarySearchTree { TreeNode root; public BinarySearchTree() { this.root = null; } public void insert(int value) { root = insertRec(root, value); } private TreeNode insertRec(TreeNode root, int value) { if (root == null) { root = new TreeNode(value); return root; } if (value root.value) { root.right = insertRec(root.right, value); } return root; } // Additional methods for traversal, search, and delete can be added here public static void main(String[] args) { BinarySearchTree bst = new BinarySearchTree(); int[] values = {50, 30, 70, 20, 40, 60, 80}; for (int value : values) { bst.insert(value); } // Add code to print or traverse the tree } } class TreeNode { int value; TreeNode left; TreeNode right; TreeNode(int value) { this.value = value; this.left = null; this.right = null; } }
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3