目次
src/runoob/binary/BinarySearchTreeInsert.java ファイル コード:
二分探索木ノードの挿入
まず二分探索木を定義します。Java コードは次のように表現されます。
public class BST<Key extends Comparable<Key>, Value> { // ツリー内のノードはプライベート クラスであり、外部は二分探索ツリー ノードの特定の実装を理解する必要はありません private class Node { private Key key; private Value value; private Node left, right; public Node(Key key, Value value) { this.key = key; this.value = value; left = right = null; } } // ルートノード private Node root; //ツリー内のノードの数 private int count; // コンストラクター、デフォルトで空の二分探索ツリーを構築します public BST() { root = null; count = 0; } // 二分探索ツリー内のノードの数を返します
public int size() { return count; } // 二分探索木が空かどうかを返す public boolean isEmpty() { return count == 0; } }
Node はノードを表し、count はノードの数を表します。
次の例では、要素 61 のステップを次の二分探索ツリーに挿入します。
(1) 挿入される要素 61 が 42 より大きい場合、42 の右サブツリーのルート ノードを比較します。
(2) 61 は 59 より大きいため、61 を 59 の右側のサブツリーの対応する位置に移動する必要がありますが、この時点では空であるため、59 の右側の子ノードとして直接挿入されます。
挿入操作も再帰的なプロセスであり、等しい、大きい、小さいの 3 つのケースに分けられます。
Javaのサンプルコード
ソース パッケージのダウンロード: https://www.runoob.com/wp-content/uploads/2020/09/runoob-algorithm-BinarySearchTreeInsert.zipをダウンロードします。
src/runoob/binary/BinarySearchTreeInsert.java ファイル コード:
package runoob.binary;
/**
* 二分探索ツリーは新しい要素を挿入します
*/
public class BinarySearchTreeInsert<Key extends Comparable<Key>, Value> { // ツリー内のノードはプライベート クラスであり、外部の世界はそれを行う必要はありません二分探索木を理解する ノードの具体的な実装 private class Node { private Key key; private Value value; private Node left, right; public Node(Key key, Value value) { this.key = key; this.value = value ; left = right = null; } } private Node root; // ルート ノード private int count; // ツリー内のノードの数 type // コンストラクター、デフォルトで空の二分探索ツリーを構築 public BinarySearchTreeInsert() { root =ヌル;
count = 0;
}
// 二分探索木内のノードの数を返す
public int size() { return count; } // 二分探索木が空かどうかを返す public boolean isEmpty() { return count == 0; } // 新しい (キー, 値) データ ペアを二分探索ツリーに挿入します public void insert(Key key, Value value) { root = insert(root, key, value); } // コア コード --- start / / to ノードをルートとする二分探索木にノード (キー、値) を挿入し、再帰アルゴリズムを使用します。 // 新しいノードを挿入した後、二分探索木のルートを返します。 private Node insert( Node node, Key key , 値 value) { if (node == null) { count++; return new Node(key, value); }
if (key.compareTo(node.key) == 0)
ノード.値 = 値;
else if (key.compareTo(node.key) < 0)
node.left = insert(node.left, key, value);
else // キー > ノード->キー
node.right = insert(node.right, key, value);
リターンノード;
}
//核代心码---结束
}