-
ノードクラスの作成: バイナリサーチツリーは、ノードの集合体です。各ノードは、値と左右の子ノードへの参照を持ちます。JavaScriptでノードクラスを作成しましょう。
class Node { constructor(value) { this.value = value; this.left = null; this.right = null; } }
-
ツリークラスの作成: バイナリサーチツリーは、ルートノードを持つツリーです。ツリークラスを作成し、挿入、検索、削除などの操作を定義します。
class BinarySearchTree { constructor() { this.root = null; } insert(value) { // ツリーに値を挿入するコードを実装します } search(value) { // ツリー内で値を検索するコードを実装します } delete(value) { // ツリーから値を削除するコードを実装します } }
-
挿入操作の実装:
insert
メソッドでは、新しい値をツリーに挿入します。挿入する場所は、現在のノードの値と比較しながら適切な位置を見つけます。insert(value) { const newNode = new Node(value); if (this.root === null) { this.root = newNode; } else { this.insertNode(this.root, newNode); } } insertNode(node, newNode) { if (newNode.value < node.value) { if (node.left === null) { node.left = newNode; } else { this.insertNode(node.left, newNode); } } else { if (node.right === null) { node.right = newNode; } else { this.insertNode(node.right, newNode); } } }
-
検索操作の実装:
search
メソッドでは、指定された値をツリー内で検索します。現在のノードの値と比較しながら、目的の値を見つけるか子ノードに移動します。search(value) { return this.searchNode(this.root, value); } searchNode(node, value) { if (node === null) { return false; } if (value < node.value) { return this.searchNode(node.left, value); } else if (value > node.value) { return this.searchNode(node.right, value); } else { return true; } }
-
削除操作の実装:
delete
メソッドでは、指定された値をツリーから削除します。削除するノードの場合分けと、子ノードの取り扱いに注意して実装します。delete(value) { this.root = this.deleteNode(this.root, value); } deleteNode(node, value) { if (node === null) { return null; } if (value < node.value) { node.left = this.deleteNode(node.left, value); return node; } else if (value > node.value) { node.right = this.deleteNode(node.right, value); returnnode; } else { if (node.left === null && node.right === null) { return null; } else if (node.left === null) { return node.right; } else if (node.right === null) { return node.left; } const minRightNode = this.findMinNode(node.right); node.value = minRightNode.value; node.right = this.deleteNode(node.right, minRightNode.value); return node; } } findMinNode(node) { if (node.left === null) { return node; } else { return this.findMinNode(node.left); } }
これらのコード例を使って、JavaScriptでバイナリサーチツリーを実装することができます。バイナリサーチツリーを使用することで、データの効率的な検索、挿入、削除が可能になります。この記事では、バイナリサーチツリーの基本的な実装と操作について説明しました。