2017-01-26 2 views
2

BST에 대해 toString 메서드를 구현했지만 작동하지만 안정적이지는 않습니다. 잘 작동 toString이 나무에 대한 예를 을 위해 : correct 을하지만,이 하나, 그것은 잘못 wrong이진 검색 트리 toString Java

사람의 도움이 될 수 있습니다, 무슨 일이야? 당신이 왼쪽 노드가있는 경우

 if (left(node) != null) { 
      toStringB(string.append(" ("), left(node)); 
     } 
     if (right(node) != null) { 
      toStringB(string.append(", "), right(node)); 
      string.append(')'); 
     } 

하지만, 권리 노드, 당신은 (left를 추가하지 않습니다 :

@Override 
    public String toString() { 
     return "(" + toStringB(new StringBuilder(), root()).toString() + ")"; 
    } 

    private StringBuilder toStringB(StringBuilder string, Node<E> node) { 
     if (node != null) { 
      string.append(node.getElement()); 
      if (left(node) != null) { 
       toStringB(string.append(" ("), left(node)); 
      } 
      if (right(node) != null) { 
       toStringB(string.append(", "), right(node)); 
       string.append(')'); 
      } 
     } 
     return string; 
    } 
+0

우리는 전체 코드를 제공하여 실행할 수 있습니까? –

답변

0

의 문제가이 자리 잡고 있습니다. 왼쪽 노드가없는 오른쪽 노드가있는 경우 , right)을 추가합니다. 이렇게하면 부적절하게 일치하는 괄호와 쉼표가 나타납니다.

(10 (7 (3 (2, 5), 9), 10, 30 (:

내가 지적하고 싶은, 당신의 하나, 실제로 예를 들어 "잘 작동"정확하지 않습니다 11 (10)))

하는의 7과 30에서 노드를 숨기 보자

(10 (7 (...), 10, 30 (...))

루트 노드 10에는 세 명의 자식 7, 1030이 있습니다. 이진 트리가 아닙니다!

아, 균형이 맞지 않는 괄호.

+0

오, 고마워, 이것을 눈치 채지 못했다. 제발 도와 주실 래요? –

+0

왼쪽 노드 또는 오른쪽 노드가있는 경우 열린 괄호를 추가하십시오. 왼쪽 노드가 있으면 추가하십시오. 왼쪽 및 오른쪽 노드가있는 경우 쉼표를 추가하십시오. 올바른 노드가 있으면 추가하십시오. 왼쪽 또는 오른쪽 노드가있는 경우 닫는 괄호를 추가하십시오. – AJNeufeld

+0

오, 정말 고마워요, 지금은 작동합니다! (10 (5 (3 (2), 9), 10 (30 (11 (10))))) –