2017-12-12 15 views
0

나는 toString() 메서드를 구현하여 AVL 트리의 선행 순서 탐색을 인쇄하려고합니다. 노드에 int 또는 char을 인쇄하고 싶지만 존재하지 않으면 대시 (-)를 인쇄하십시오. 지금까지는 이것이 내 코드입니다.재귀를 사용하여 "조건부 문자열"을 만드는 방법

public String toString() { 
    if(root != null) { 
     AVLNode<T> node = root; 
     String result = ""; 
     return preorder(node, result); 
    }else { 
     return "Empty root"; 
    } 

} 

private String preorder(AVLNode<T> root, String result) { 
    result = result + root.getElement().toString(); 
    if(nodeCheckLeft(root)) { 
     preorder(root.getLeft(), result); 
    }else { 
     result = result + "-"; 
    } 

    if(nodeCheckRight(root)) { 
     preorder(root.getRight(), result); 
    }else { 
     result = result +"-"; 
    } 
    return result; 
} 

nodeCheck는 노드가 비어 있는지 알아보기 위해 사용하는 보조 메소드입니다.

예상 결과

은 다음과 같습니다

: 여기 Adding{'b','a','d','c'} --> "ba--dc--"

Adding{'b'} --> "b--"

Adding{'b','a'} --> "ba---"

Adding{'b','a','d'} --> "ba--d--"

전체 테스트입니다

4 번 줄에 오는 내용은 b-입니다. 문자열이 "더 깊은"분기 재귀에서 변경되기 때문에 결과 문자열을 toString() 메서드에 반환하는 주 분기는 업데이트되지 않는다고 (내가 잘못 생각할 수도 있음) 가정합니다. . 이 문제를 해결할 방법이 있습니까?

+0

AVLNode 자신의 클래스? – Fahad

+0

예, 제 수업입니다. – Eleuis

답변

0

Java의 문자열은 변경할 수 없습니다. 이것이 의미하는 바는 실제로는 문자열로 바뀌었을뿐입니다. 이제 새 문자열을 만들고 이제 변수가 대신 가리키게됩니다.

특히, result = result + "-"; 줄은 원래 전달한 문자열을 변경하지 않습니다. 이 함수 호출에서 변수 result은 완전히 다른 문자열을 보유하고 반환됩니다. 외부 호출의 result 값에는 영향을 미치지 않으며 실제로 반환 된 문자열은 아무 것도 수행되지 않습니다.

수정은과 같이 다시 result에 반환 된 문자열을 할당한다 : result = preorder(root.getLeft(), result);

+0

나는 당신이 나에게 말했듯이 코드를 변경했고 이제는 'c'를 추가 할 때까지 모든 테스트를 통과합니다. "ba - dc ---"가되어야하지만 대신 "ba - c--"가 표시됩니다. 그것이 왜 바뀌는 지에 대한 단서? – Eleuis

+0

테스트 케이스가 정확합니까? c는 두 개의 빈 아이들을 가지고 있고 d는 여전히 또 다른 빈 아이들을 가지고 있기 때문에 그것은'ba - dc --- '처럼 보입니다. – Kirill

+0

예, 예상 결과입니다 : -> a.add ('c'); -> assertEquals ("ba - dc--", a.toString()); 바코드가 반환됩니다. – Eleuis