2017-02-17 2 views
-1

나는 toString 메소드를 가지고있다.이 메소드는 전체 2 진 검색 트리를 나타내는 문자열을 순서대로 리턴해야한다. 지금까지이 방법을 사용해 왔지만 순서대로 번호를 출력하는 것뿐입니다. toString 메서드는 물론 rootNode의 값을 반환합니다. 이 문제를 어떻게 풀어야할지 모르겠다.자바 바이너리 검색 트리 inorder inorder 재귀 적으로, 리턴 스트링

@Override 
public String toString() { 
    if (rootNode == null){ 
     return ""; 
    } 
    else { 
     return inorder(rootNode.data); 
    } 
} 

/** 
* @param root 
*/ 
public String inorder(Node<T> root){ 
    if (root != null){ 
     inorder(root.left); 
     System.out.println(root.value + " "); 
     inorder(root.right); 
    } 
} 

나는 몇 시간 동안이 문제에 봉착했습니다. 그 toString()이 travsersal inorder를 해당 문자열을 반환 할 수 있도록

+0

문제가 무엇 : 마지막으로

string TreeNodeData = ""; Tree.inOrder(ENTER ROOT OF TREE HERE, TreeNodeData); 

, 당신과 결과를 확인할 수 있습니까? 귀하의 설명이 코드와 일치합니다. 'toString()'함수에서 기대하는 것은 무엇입니까? 가능한 경우 전체 코드와 샘플 입출력을 프로그램에 제공하십시오. –

+0

아니요, toString 메서드는 ** BST 전체를 하나의 문자열로 반환해야합니다 ** 단지 인쇄하지 말아야합니다. – SuperMacster

+0

문제는 void inorder (노드 )에서 inorder (노드 ) 메서드 내에서 문자열 시퀀스를 생성하는 대신 인쇄에 관심이 없으므로 String s = inorder (Node )를 호출 한 후 인쇄됩니다. inorder 구조체와 inorder의 트리 (노드 )는 toString() 메서드에서 결과를 다시 전송하는 데 관심이 있다면 String을 반환해야합니다. – ShayHaned

답변

1

어쩌면 당신은 또한, 서명 대신 중위 순회 구조와 같은 문자열을 구축에 도움이 될이

@Override 
public String toString() 
{ 
    java.lang.StringBuilder toReturn = new java.lang.StringBuilder(); 
    if (rootNode == null){ 
     return ""; 
    } 
    else{ 
     inorder(rootNode.data , toReturn); 
    } 
    return toReturn.toString(); 
} 

/** 
* @param root 
*/ 
public void inorder(Node<T> root , java.lang.StringBuilder treeLikeStringBuilder){ 
    if (root != null){ 
     inorder(root.left); 
     System.out.println(root.value + " "); 
     treeLikeStringBuilder.append(root.value.toString() + " "); 
     inorder(root.right); 
    } 
} 

중위 (노드, 모두 StringBuilder)을 시도 할 수 있습니다 StringBuilder를 사용하여 inorder (Node, StringBuilder) 메서드에 인수 (StringBuilder toReturn)로 전달 된 MUTABLE StringBuilder에 대한 변경 사항이 toString() 메서드의 변경 사항을 반영하여 도움이 되었습니까?

+0

그것은 작동합니다! 전에는 stringbuilder를 사용하지 마십시오. 고맙습니다!!!!!! – SuperMacster

0

아래 알고리즘은 inOrder 알고리즘과 관련하여 모든 노드를 방문하고 해당 노드 데이터를 문자열에 추가하는 작업을 단순화합니다.

이 같은 방법 호출
public void inOrder(Node<T> root, string NodeData){ // Algorithm for inOrder - "left child node, root, right child node" 
    if (root != null){ 
     inOrder(root.left, NodeData); // traverse left sub tree 
     NodeData += root.Data.ToString() + " | "; // append to NodeData 
     inOrder(root.right, NodeData); // traverse right sub tree 
    } 
} 

:

System.out.println(TreeNodeData); 
관련 문제