Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

Javascriptのツリーにキーを挿入する


新しく作成されたバイナリツリーに最初に挿入すると、ルートにノードが作成されます。左の子が親よりも小さく、右の子が親よりも大きいという二分探索木のプロパティに従って、さらに挿入が挿入されます。

このアルゴリズムをコードで実装する方法を見てみましょう-

insertIter(data) {
   let node = new this.Node(data);

   // Check if the tree is empty
   if (this.root === null) {
      // Insert as the first element
      this.root = node; return;
   }

   let currNode = this.root;
   while (true) {
      if (data < currNode.data) {
         // Set the value here as we've reached a leaf node
         if (currNode.left === null) {
            currNode.left = node;
            break;
         } else {
            currNode = currNode.left;
         }
      } else {
         // Set the value here as we've reached a leaf node
         if (currNode.right === null) {
            currNode.right = node;
            break;
         } else {
            currNode = currNode.right;
         }
      }
   }
}

この関数がどのように機能するかを理解しましょう。最初に、ルートがnullであるかどうかを確認します。つまり、ツリーが空であるかどうかを確認します。そうであれば、新しいノードをルートとして割り当て、完了です。そうでない場合は、currNode変数を作成し、それをルートにポイントします。次に、データがcurrNodeより小さいかどうかをチェックし、小さい場合は、その左の子がnullであるかどうかをチェックします。その場合は、ここにデータを保持して終了します。それ以外の場合は、葉に到達するまで反復を続け、最終的にデータをそこに配置します。

この関数は、-

を使用してテストできます。

let BST = new BinarySearchTree();
BST.insertIter(10);
BST.insertIter(15);
BST.insertIter(5);
BST.insertIter(50);
BST.insertIter(3);
BST.insertIter(7);
BST.insertIter(12);

この関数を再帰的にすることもできます。ツリーは本質的に再帰的な構造であり、この再帰的なプロパティをかなり簡単に利用できます。挿入の再帰バージョンを見てみましょう-

insertRec(data) {
   let node = new this.Node(data);

   // Check if the tree is empty
   if (this.root === null) {
      // Insert as the first element
      this.root = node;
   } else {
      insertRecHelper(this.root, node);
   }
}

再帰できるヘルパー関数を作成する必要がありますが、それをクラスのプロパティとして公開したくないため、この関数はクラス定義から外れます。

function insertRecHelper(root, node) {
   if (node.data < root.data) {
      // Set the value here as we've reached a leaf node

      if (root.left === null) {
         root.left = node;
      } else {
         // Recursively call this function with the left subtree
            insertRecHelper(root.left, node);
      }
   } else {
      // Set the value here as we've reached a leaf node
      if (root.right === null) {
         root.right = node;
      } else {
         // Recursively call this function with the right subtree
         insertRecHelper(root.right, node);
      }
   }
}

-

を使用してこれをテストできます

let BST = new BinarySearchTree();
BST.insertRec(10);
BST.insertRec(15);
BST.insertRec(5);
BST.insertRec(50);
BST.insertRec(3);
BST.insertRec(7);
BST.insertRec(12);

  1. Javascriptツリーでの順序どおりのトラバーサル

    このトラバーサルメソッドでは、最初に左側のサブツリーにアクセスし、次にルートにアクセスし、次に右側のサブツリーにアクセスします。すべてのノードがサブツリー自体を表す場合があることを常に覚えておく必要があります。 二分木が順番にトラバースされる場合 、出力は昇順でソートされたキー値を生成します。 A、から始めます 順番にトラバーサルした後、左側のサブツリーBに移動します。 B また、順番にトラバースされます。このプロセスは、すべてのノードにアクセスするまで続きます。このツリーの順序付けられたトラバーサルの出力は次のようになります- D → B → E &rarr

  2. Javascriptでのプリムのアルゴリズム

    Primのアルゴリズムは、重み付き無向グラフの最小スパニングツリーを見つける欲張りアルゴリズムです。すべての頂点を含むツリーを形成するエッジのサブセットを検出し、ツリー内のすべてのエッジの合計の重みが最小化されます。 アルゴリズムは、ツリーから別の頂点への可能な限り安価な接続を追加する各ステップで、任意の開始頂点から一度に1つの頂点でこのツリーを構築することによって動作します。 プリムのアルゴリズムはどのように機能しますか? プリムのアルゴリズムがどのように機能するかを示す図を見てみましょう- 1.ルートノードとして任意のノードを選択します。この場合、Primのスパニングツリーのルートノ