2017-11-27 4 views
0

Java에서 이진 검색 트리를 인쇄하는 방법은 무엇입니까? 트리에 삽입하는 코드를 작성했지만 트리를 인쇄 할 수 없으면 요소가 추가되는지 확실히 확인할 수 있습니다. 아래 코드를 게시 할 것입니다.Java 이진 검색 트리 인쇄

public class TreeNode { 

    TreeNode left; 
    TreeNode right; 
    TreeNode root; 

    int data; 

    public TreeNode(int d) { 

     data = d; 
     left = right = null; 
     root = null; 

    } 

    public synchronized void insert(int d) { 
     if (root == null){ 
      root = new TreeNode(d); 
     } 
     if (d < data) { 
      if (left == null) { 
       left = new TreeNode(d); 
      } else { 
       left.insert(d); 
      } 
     } else if (d > data) { 
      if (right == null) { 
       right = new TreeNode(d); 
      } else { 
       right.insert(d); 
      } 
     } 
    } 

    public TreeNode treeSearch(TreeNode root, int target) { 
     if (root != null) { 
      if (target < root.data) { 
       root = treeSearch(root.left, target); 
      } else if (target > root.data) { 
       root = treeSearch(root.right, target); 
      } 
     } 
     return root; 
    } 
} 
+2

그것을 인쇄 적어도 너무 많은 방법이 있습니다. 간단한 입력과 원하는 출력을 제공 할 수 있습니까? 너 혼자 해봤 니? – Fureeish

+0

그 방법을 설명하기가 어렵지만 나는 그것을 시험해 볼 것입니다. 출력은 루트를 먼저 출력 한 다음 루트를 출력하고 루트를 출력하는 낮은 레벨을 삽입 한 다음 삽입 된 값에 따라이 레벨을 분기하는 더 낮은 레벨을 출력해야합니다. – Bryan

+0

내 의견을 읽으면서 "** 간단한 입력과 원하는 출력을 제공 할 수 있습니까? **"부분을 놓친 것 같습니다. 이것은 질문을 편집해야한다는 것을 의미하므로 누구나 쉽게 의견을 볼 수 있습니다. – Fureeish

답변

2

당신은 방법에 따라 사용할 수 있습니다 :

void printTree(TreeNode node, String prefix) 
{ 
    if(node == null) return; 

    System.out.println(prefix + " + " + node.data); 
    printTree(node.left , prefix + " "); 
    printTree(node.right , prefix + " "); 
} 

초기 호출하면 트리를 인쇄 할 곳에서 printTree(root,"");을해야합니다. 여기 root은 루트 노드의 참조입니다.

업데이트 :
당신은 here

+0

도움을 주셔서 감사합니다.이 방법을 자세히 설명해 주시겠습니까? – Bryan

+0

@Bryan이 메서드는'recursion-method'를 사용하여 트리를 인쇄합니다. 첫 번째 매개 변수는 인쇄 될 노드이고 두 번째 인수는 트리의 더 나은 가시성을 위해 공백이있는'String'입니다. 이 메소드는'node'가'null'인지를 리턴합니다. null이 아닌 경우'data' 부분을 출력하고'left'와'right' 자식을 위해 자체를 호출합니다. – cse

+0

추가 설명해 주셔서 감사합니다. – Bryan

0

는이 같은 트리 데이터를 인쇄 할 수있는 작업이 코드를 볼 수 있습니다.

public void printTree(TreeNode root) { 
     if (root == null) return; 
     System.out.println(root.data); 
     printTree(root.left); 
     printTree(root.right); 
    } 
0
private void print(PrintWriter out) { 
    print(root, out, ""); 
} 

private void print(TreeNode subtree, PrintWriter out, String indent) { 
    if (subtree != null) { 
     print(subtree.left, out, indent + "--"); 
     out.printf("%s %s%n", indent, subtree.data); 
     print(subtree.right, out, indent + "--"); 
    } 
}