2012-02-17 4 views
2

에 나는이 임무에 일하고 있어요 : 나는 자바 스크립트에서 이진 트리를 짓고 있어요 http://www.cs.colostate.edu/~anderson/ct310/index.html/doku.php?id=assignments:assignment_2이진 트리 자바 스크립트

. 기본적으로 그것은 관계형 트리입니다. 우리는 데이터, 왼쪽 자식, 오른쪽 자식이라는 3 가지 인수를 취하는이 트리 클래스를 사용합니다. 왼쪽 & 오른쪽 자식은 var에 저장된 새로운 트리 개체입니다.

function Tree(data, left, right) 
{ 
    // pravite data 
    var data = data; 
    var leftChild = left; 
    var rightChild = right; 

    // public functions 
    this.getData = function() 
    { 
     return data; 
    } 

    this.left = function() 
    { 
     return leftChild; 
    } 

    this.right = function() 
    { 
     return rightChild; 
    } 

} 

여기 여기 toString() 메서드를

Tree.prototype.toString = function(indent) 
{ 
    var spaces = ''; 
    if (!indent) 
    { 
    indent = 0; 
    } 
    else{ 
    spaces = spaces*indent; 
    } 
    // if the left tree isn't void 
    if(this.tree().left()) 
    { 
     this.tree().left().toString(indent+5); 
    } 
    if(this.tree().right()) 
    { 
     this.tree.right().toString(indent+5); 
    } 
    print(spaces + this.data); 
} 

있어 내가로 전달받을 데이터의 :

여기에 트리 클래스입니다. Rhino를 명령 행에서 테스트하고 있습니다.

var abc = new Tree('a', new Tree('b'), new Tree('c')); 
abc.toString() 

toString 메서드에서 플로우 오버 플로우가 발생합니다. 내 교수는 if 문에서 this.Left()를 사용한다고 말합니다. 왜냐하면 재귀 할 때 정의되지 않은 경우 실패 할 것이기 때문입니다.

어떤 아이디어가 잘못 되었나요? ASID

+0

가하셨습니까에 ToString를 호출하지 않습니다 경우 (this.left() 참조) - this.tree없이()? 생성자에 this.tree가 없습니다 :) – mfeineis

+0

tree는 큰 구조체의 이름이므로 "node"대신 "tree"클래스를 호출하는 것이 이상합니다. 이진 포레스트라는 두 개의 포인터가있는 나무로 구성된 구조체를 호출 할 것입니다. 바보. – nwellcome

답변

3

음 오른쪽 지점에 대한 마지막 참조가없는 일부 괄호 ...

this.tree.right().toString(indent+5) // <-- right here 

, 나는 this.tree() 어디 정의 표시되지 않습니다. 모든 장소에서 this.left()this.right()이어야한다고 생각합니다.

var l = this.left(); 
if(l) l.toString(indent+5); 

이 추가 함수 호출을 피할 수 :

또한, 약간의 최적화를 위해, 같은 것을 고려하십시오.

1

재귀 함수에는 기본 사례가 없습니다. 그것은 영원히 계속 될 것입니다. 노드가 자식이없는 경우

,보다 그들()