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

JavaScriptの二分探索木の検索モード


モード:

データセットのモードは、単にそのデータセットで最も多くの回数発生する数です。たとえば、3は、データセット2、3、1、3、4、2、3、1のモードであり、ほとんどの場合に発生します。

二分探索木

ツリーDSは、次の条件を満たす場合に有効な二分探索木です-

  • ノードの左側のサブツリーには、ノードのキー以下のキーを持つノードのみが含まれています。

  • ノードの右側のサブツリーには、ノードのキー以上のキーを持つノードのみが含まれます。

  • 左右のサブツリーもバイナリ検索ツリーである必要があります。

問題

唯一の引数としてBSTルートを受け取るJavaScript関数を作成する必要があります。 BSTには、重複が含まれている可能性があります。ツリーに保存されているデータのモードを見つけて返す必要があります。

このためのコードは-

になります
class Node{
   constructor(data) {
      this.data = data;
      this.left = null;
      this.right = null;
   };
};
class BinarySearchTree{
   constructor(){
      // root of a binary seach tree
      this.root = null;
   }
   insert(data){
      var newNode = new Node(data);
      if(this.root === null){
         this.root = newNode;
      }else{
         this.insertNode(this.root, newNode);
      };
   };
   insertNode(node, newNode){
      if(newNode.data < node.data){
         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);
         };
      };
   };
};
const BST = new BinarySearchTree();
BST.insert(1);
BST.insert(3);
BST.insert(3);
BST.insert(2);
BST.insert(3);
BST.insert(2);
const findMode = function(root) {
   let max = 1;
   const hash = {};
   const result = [];
   const traverse = node => {
      if (hash[node.data]) {
         hash[node.data] += 1;
         max = Math.max(max, hash[node.data]);
      } else {
         hash[node.data] = 1;
      };
      node.left && traverse(node.left);
      node.right && traverse(node.right);
   };
   if(root){
      traverse(root);
   };
   for(const key in hash) {
      hash[key] === max && result.push(key);
   };
   return +result[0];
};
console.log(findMode(BST.root));

出力

そして、コンソールの出力は-

になります
3

  1. C++でバイナリ検索ツリーを回復する

    1つの二分探索木があるとします。ここで、このBSTの2つの要素が交換されていると考えて、この二分探索木を回復する必要があります。 したがって、指定されたツリーが以下のようになっている場合(最初のツリー)、復元されたツリーは(2番目のツリー)- これを解決するには、次の手順に従います- ノードの前、最初、2番目の参照を定義する findProblem()と呼ばれる1つのメソッドを定義します。これは、ノードを取ります ノードがnullの場合は、を返します。 findProblem(ノードの左側)を呼び出す ノードの値の場合 firstがnullの場合、f

  2. C++での二分木から二分探索木への変換

    二分木 は、ツリーの各ノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。これらの子ノードは、右の子および左の子と呼ばれます。 単純な二分木は-です 二分探索木(BST) は、次のルールに従う特殊なタイプのツリーです- 左の子ノードの値は常に親よりも小さくなります注 右側の子ノードは、親ノードよりも大きな値を持っています。 すべてのノードが個別に二分探索木を形成します。 二分探索木(BST)の例 − バイナリ検索ツリーは、検索、最小値と最大値の検索などの操作の複雑さを軽減するために作成されます。 ここでは、二分木が与えられており、