JavaScriptで二分木のノード(Node)を定義する方法
木構造(ツリー)を構成する個々の要素は「ノード」と呼ばれます。二分木はノードの集合体であるため、二分木を定義する前に、まずノードそのものを定義する必要があります。
ここでは、left・right・data という3つのプロパティを持つ、シンプルなノード定義を作成していきましょう。それぞれのプロパティの役割は以下のとおりです。
left ― このノードの左の子ノードへの参照を保持します。
right ― このノードの右の子ノードへの参照を保持します。
data ― このノードに格納したいデータへの参照を保持します。
ノード構造のコード例
それでは、このような構造をコードで表現してみましょう。
class Node {
constructor(data, left = null, right = null) {
this.data = data;
this.left = left;
this.right = right;
}
}このように、Node クラスは data・left・right の3つのプロパティを受け取るコンストラクタとして定義されています。
実際の実装では、値は葉(リーフ)の位置に挿入していくことが多いため、left と right を null のまま初期化したノードを生成するケースがほとんどです。
BinarySearchTreeクラス内での定義
利便性を高めるために、この Node クラスは、後ほど作成する BinarySearchTree(二分探索木)クラスのプロパティとして定義するのがおすすめです。こうすることで、使用する場所の中にクラスを閉じ込めることができ、コードの整理やカプセル化がしやすくなります。
多分木の場合との違い
なお、左右2つの子ノードを明示的に持つこの形式は、二分木に特有のものです。B木やB+木のような多分木(マルチウェイツリー)の場合は、子ノードを配列などのコンテナとして保持する children プロパティを定義します。木構造の種類によってノードの設計が変わる点は、押さえておくとよいでしょう。
-
JavaScriptのWeakSetとは?特徴と主要メソッド、サンプルコードをわかりやすく解説
JavaScriptのWeakSet(ウィークセット)は、オブジェクトを格納するためのコレクションです。Setと同様に、同じオブジェクトを重複して保存することはできません。WeakSetの主な特徴弱い参照で保持する:WeakSet内のオブジェクトへの参照が他に存在しなくなると、ガベージコレクションによって自動的にメモリから解放されます。そのため、メモリリークを防ぎたい場面で役立ちます。オブジェクトのみ格納可能:数値や文字列などのプリミティブ値は追加できません。列挙できない:Setのようなsizeプロパティや反復処理の仕組みを持たず、格納されている要素の一覧を取得することはできません。WeakS
-
JavaScriptで子ノードの数を取得する方法
JavaScriptでは、children.lengthプロパティを使うことで、要素が持つ子ノード(子要素)の数を簡単に取得できます。この記事では、実際のコード例を使って、その基本的な使い方を解説します。children.lengthとはchildrenは、ある要素の子要素(HTMLコレクション)を返すプロパティです。さらに.lengthを付けることで、子要素の総数を数値として取得できます。例えば、<ul>タグの中にある<li>要素の個数を知りたい場合などに便利です。サンプルコード<!DOCTYPE html> <html lang="ja&