二分探索木ノードの挿入(Javaサンプルコード)

目次

 

二分探索木ノードの挿入

Javaのサンプルコード

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 のステップを次の二分探索ツリーに挿入します。

 

d3976baf770aee333af91838b6012acc.png

(1) 挿入される要素 61 が 42 より大きい場合、42 の右サブツリーのルート ノードを比較します。

 

073c44a6f4adc17e5ebbd9076080701b.png

(2) 61 は 59 より大きいため、61 を 59 の右側のサブツリーの対応する位置に移動する必要がありますが、この時点では空であるため、59 の右側の子ノードとして直接挿入されます。

 

930606aa28b05164ad0f51e79f2ae5ac.png

挿入操作も再帰的なプロセスであり、等しい、大きい、小さいの 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);

        リターンノード;
    }
    //核代心码---结束
}

 

おすすめ

転載: blog.csdn.net/2301_78835635/article/details/132296523