2014-03-18 2 views
0

나는 자신에게 빠른 Tree and Node 클래스를 썼다. 나는 가변 수의 다음 레벨 노드를 가지고 있는데, ArrayList를 사용하고 있습니다. 그것은 마치 toString() 메소드가 문제가되는 것처럼 작동합니다. 예 : 일련 번호로 설정했습니다.트리의 모든 잎의 전체 경로 표시

  • 0
  • 0 어린이 1,2,3 나는 나무를 인쇄 할 때
  • 2가 지금 아이 2.4 및 2.5

을 가지고에게 있으며, 이것이 내가 무엇을 얻을 루트입니다 : (슬래시가있을 것으로 가정된다)

  • /0/1
  • /2/2.5
  • ,745,151

    • /0/1
    • /0/2/2.5
    • /0/2/2.4 :
    • /2.4
    • /3

    은 내가하지만 원하는 것은 이것이다

  • /0/3

이 내 toString()이다 :

public String toString() { 
    String all = ""; 
    for (Node<T> node : nextNodes) { 
     all += node.toString(); 
     if (node.isLeaf()) { 
      all += "\n"; 
     } 
    } 
    return "/" + this.getNodeContent().toString() + all; 
} 

누군가가 매번 뿌리에서 벗어나기 위해 무엇을 바꾸어야한다고 말할 수 있습니까? 감사!

+0

에 오신 것을 환영합니다 같은 방법 printPaths를 호출합니다 모든 경로를 인쇄하려면! http://en.wikipedia.org/wiki/Tree_traversal이 도움이 될 수 있습니까? –

답변

1

약 3 얼마나 많은 경로입니까? 코드가 작동하지 않기 때문에 많은 잎만큼 많은 경로가 있습니다. 작성한 코드는 모든 노드를 반복합니다. 그러나 루트에서 나뭇잎까지 모든 경로를 인쇄하려고합니다.

한 가지 해결책은 재귀를 사용하는 것입니다. 모든 어린이에 대해 루트 및 인쇄 경로에서 시작합니다. 은 내가 printPaths라는 이름의 경로를 인쇄이

public void printPaths(Node<T> nodeOnPath, String onPath){ 
    String nodePath = onPath + "/" + nodeOnPath.getNodeContent().toString(); 
    if (nodeOnPath.isLeaf()){ 
     System.out.println(nodePath); 
     return; 
    } 

    ArrayList<Node> children = nodeOnPath.getChildren(); 
    for (Node<T> node : children){ 
     printPaths(node, nodePath); 
    } 
} 

방법처럼 보일 - 두 개의 인수를 취 전나무 노드 nodeOnPath와 둘째에게 인 노드 nodeOnPath에 루트에서 경로입니다. 메서드의 첫 번째 줄에서 nodePath를 만듭니다. 그런 다음 node가 leaf인지 확인하십시오. - 대답이 yes이면 nodePath를 인쇄하고 메소드에서 종료하십시오.

노드가 리프가 아닌 경우 노드에 대한 모든 하위 항목을 가져 와서 반복하고 모든 노드에서 경로를 생성합니다. 이 부분은 각 루프에 있습니다.

는 유래에서이

printPaths(rootNode, ""); 
0
당신은 모든 차일 경로에 getNodeContent()를 추가 할 필요가

, 여기에 솔루션입니다 :

public String toString() { 
     String all = "" 
     for (Node<T> node : nextNodes) { 
      all += this.getNodeContent().toString() + node.toString(); 
      if (node.isLeaf()) { 
       all += "\n"; 
      } 
     } 
     return "/" + + all; 
    } 
관련 문제