2017-11-16 4 views
0

임의로 생성 된 숫자가있는 배열이 있으며이를 이진 검색 트리 알고리즘에 입력 한 다음이를 출력하고 시각적으로 표현해야합니다. 내가 루트에서 막대기와 노드 (좌우) 같은 것을 단순한 시각적 표현이 필요이진 탐색 트리 algirithm에 임의의 값의 배열을 입력하는 방법

//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와 같은 도구를 사용할 수 있습니다.