2017-11-16 4 views
0

ランダムに生成された数値を持つ配列があり、バイナリ検索ツリーアルゴリズムに入力して出力し、視覚的に表現する必要があります。私は、ルートからスティックとノード(左から右)のようなものをシンプルなビジュアル表現を必要とするバイナリサーチツリーアルゴリズムにランダムな値の配列を入力する方法

//buttons and input 
range:<input type="text" id="input1"> 
lenght:<input type="text" id="input2"> 
<input type="submit" value="Submit" onclick="javascript:myJsFunction()"> 
<script> 
//random number generator 
function myJsFunction(){ 
    var x=document.getElementById('input1').value; 
    var n=document.getElementById('input2').value; 
    var data=[]; 

    for (var i = 0; i < n ; i++){ 
     data[i]=Math.floor(Math.random()*x); 
    } 
} 


//binary search tree algorithm 
class Node { 
    constructor(data, left = null, right = null) { 
     this.data = data; 
     this.left = left; 
     this.right = right; 
    } 
} 

class BinaryTree { 
    constructor() { 
     this.root = null; 
    } 

    add(data) { 
     const node = this.root; 
     if (node === null) { 
      this.root = new Node(data); 
      return; 
     } else { 
      const searchTree = function(node) { 
       if (data < node.data) { 
        if (node.left === null) { 
         node.left = new Node(data); 
         return; 
        } else if (node.left !== null) { 
         return searchTree(node.left); 
        } 
       } else if (data > node.data) { 
        if (node.right === null) { 
         node.right = new Node(data); 
         return; 
        } else if (node.right !== null) { 
         return searchTree(node.right); 
        } 
       } else { 
        return null; 
       } 
      }; 

      return searchTree(node); 
     } 
    } 
} 
</script> 

: は、ここでは、コードです。私は配列のバイナリツリーや適切な視覚化に何かを見つけることができなかったので、私はいくつかの助けが必要です。

+0

インデントを修正してください。それは読みやすくなります! あなたの質問で私たちに感謝する必要はありません。 –

+0

ええと、あまりにも多くのコードがここにあるように感じます。あなたのコンストラクタでは、必要なのは '(データ)'と 'this.data = data;'とそれ以下の 'this.children = [];'です。私は子供のコンセプトがあなたの木から抜けているようです。私はあなたが子供を格納するために空の配列を初期化する必要があると私はちょうどこのコメントであなたを示したように子供のプロパティを割り当てる必要があると思う。 – Daniel

答えて

0

子供のコンセプトがあなたのツリーにないようです。私はあなたが子供を格納するために空の配列を初期化し、それにchildrenプロパティを割り当てる必要があると信じています。

class Node { 
    constructor(data){ 
     this.data = data; 
     this.children = []; 
    } 

    add(data) { 
     this.children.push(new Node(data)); 
    } 

    remove(data) { 
     this.children = this.children.filter(node => { 
      return node.data !== data; 
     }); 
    } 

} 

class Tree { 
    this.root = null; 
} 

だから私は、データとaddメソッド内に新しいノードを作成しました。次に、新しく作成したノードを取り出し、現在のノードchildren配列にプッシュします。

データ変数を初期化して空の配列を作成したので、各ノードにはこの子配列があり、すべての子ノードにはいくつかの子ノードを持たせることができます。

addおよびremoveメソッドはすべてのノードに属しているため、これらの子ノードのいずれかにaddを簡単に呼び出すことができます。これがツリー構造を構築する方法です。

最初にツリーを作成すると、空のルートプロパティで開始されます。

は最後に、あなたはあなたのトラバース方法、あなたは左から右に行く言及し、あなたがしなければならないすべてはこれを実装であるので、あなたのケースでは幅優先を実装する必要があります。

traverseBF(callback)

限り視覚的なダイアグラムは、親ノードから子ノードを表す下のピラミッドの上部にある最初の単一のボックスから、次に右に向かうボックスの各行の別のセットを指す矢印付きボックスのピラミッドを描画します。右。 draw.ioのようなツールを使うことができます。

関連する問題