2017-12-27 26 views
1

SortTree 클래스에서 (node.data) 클래스를 TreePrinter으로 보내면 트리를 인쇄하는 데 사용할 수 있습니다.인쇄 방법 이진 트리?

import javax.swing.tree.TreeNode; 


public class SortTree { 

static Node root; 
TreePrinter type =new TreePrinter(); 

class Node<A extends Comparable>{ 

int data; 
Node left, right; 

Node(int d) { 
    data = d; 
    left = null; 
right = null; 
} 
} 

Node sortedArrayToBST(int arr[], int start, int end) { 
if (start > end) { 
    return null; 
} 

int mid = (start + end)/2; 
Node node = new Node(arr[mid]); 
node.left = sortedArrayToBST(arr, start, mid - 1); 
node.right = sortedArrayToBST(arr, mid + 1, end);  
return node; 
} 
void preOrder(Node node) { 
if (node == null) { 
    return; 
} 
//System.out.print(node.data + " "); 
preOrder(node.left); 
preOrder(node.right); 
} 
} 

그리고 이것은 TreePrinter 클래스 :

답변

0

내가보다는, 당신이 toString을 구현하는 것이 좋습니다 전순으로 다음 트리를 입력 (node.data) 클래스 treeprinter에를 보내 도움을 분류

import java.io.IOException; 
import java.io.OutputStreamWriter; 

public class TreePrinter { 

public static class Node<T extends Comparable<T>> { 
T value; 
Node<T> left, right; 

public void insertToTree(T v) { 
if (value == null) { 
    value = v; 
    return; 
} 
if (v.compareTo(value) < 0) { 
    if (left == null) { 
     left = new Node<T>(); 
    } 
    left.insertToTree(v); 
} else { 
    if (right == null) { 
     right = new Node<T>(); 
    } 
    right.insertToTree(v); 
} 
} 

public void printTree(OutputStreamWriter out) throws IOException { 
if (right != null) { 
    right.printTree(out, true, ""); 
} 
printNodeValue(out); 
if (left != null) { 
    left.printTree(out, false, ""); 
} 
} 

private void printNodeValue(OutputStreamWriter out) throws IOException { 
if (value == null) { 
    out.write("<null>"); 
} else { 
    out.write(value.toString()); 
} 
out.write('\n'); 
} 

private void printTree(OutputStreamWriter out, boolean isRight, String indent) throws IOException { 
if (right != null) { 
    right.printTree(out, true, indent + (isRight ? "  " : " |  ")); 
} 
out.write(indent); 
if (isRight) { 
    out.write("┌"); 
} else { 
    out.write("└"); 
} 
out.write("────"); 
printNodeValue(out); 
if (left != null) { 
    left.printTree(out, false, indent + (isRight ? " |  " : "  ")); 
} 
}}} 

노드 이 TreePrinter.

Node 클래스를 약간 변경하고 SortTree 바깥으로 옮겨 코드를 https://github.com/johanwitters/stackoverflow-tree-printer에서 사용할 수있게되었습니다.

노드의 구현은 여기에 있습니다 : 나는 희망

public class TestSortTree { 
    @Test 
    public void test() { 
     Node node = new Node(1); 
     Node left = new Node(2); 
     Node leftLeft = new Node(22); 
     Node leftRight = new Node(23); 
     Node leftRightLeft = new Node(24); 
     left.setLeft(leftLeft); 
     leftRight.setLeft(new Node(39)); 
     left.setRight(leftRight); 
     node.setLeft(left); 
     node.setRight(new Node(3)); 
     System.out.println(node.toString()); 
    } 
} 

enter image description here

을하는 데 도움이 :

package com.johanw.stackoverflow.tree; 

import com.johanw.stackoverflow.util.Helper; 

public class Node<A extends Comparable>{ 
    private static int AMOUNT_INDENT = 3; 

    private int data; 
    private Node left, right; 

    public Node(int d) { 
     data = d; 
     left = null; 
     right = null; 
    } 

    public void setLeft(Node left) { 
     this.left = left; 
    } 

    public void setRight(Node right) { 
     this.right = right; 
    } 

    public int getData() { 
     return data; 
    } 

    public Node getLeft() { 
     return left; 
    } 

    public Node getRight() { 
     return right; 
    } 

    public void indent(StringBuilder builder, int indent) { 
     builder.append(Helper.repeat(indent * (AMOUNT_INDENT + 1), " ")); 
    } 

    public void newLine(StringBuilder builder) { 
     builder.append(System.lineSeparator()); 
    } 

    public String toString(int indent) { 
     StringBuilder builder = new StringBuilder(); 
     builder.append(data); 
     newLine(builder); 
     if (left != null) { 
      indent(builder, indent); 
      builder.append("└" + Helper.repeat(AMOUNT_INDENT, "─") + left.toString(indent + 1)); 
     } 
     if (right != null) { 
      indent(builder, indent); 
      builder.append("└" + Helper.repeat(AMOUNT_INDENT, "─") + right.toString(indent + 1)); 
     } 
     return builder.toString(); 
    } 

    @Override 
    public String toString() { 
     return toString(0); 
    } 
} 

아래의 단위 테스트는 주어진 트리 구조의 하단에 출력을 제공

0

nod를 수신하려면 e.data in TreePrinter.

How to print binary tree diagram?

내가에 Node sortedArrayToBST(int arr[], int start, int end)에 다음 수정을하여 데이터를 보낼 것이다 : 나는 다음과 같은 코드

class TreePrinter<T extends Comparable<T>>{ 
    Node<T extends Comparable<T>> root; 

    public TreePrinter(){ 
     root = new Node<T extends Comparable<T>>(); 
    } 

    public void insertToTree(T v) { 
     root.insertToTree(v); 
    } 

그것은 지금이 게시물에서 알고리즘을 사용하여 트리를 인쇄 쉬울 것이다를 추가 SortTree

void sortedArrayToBST(int arr[], int start, int end) { 
    if (start > end) { 
     return; 
    } 

    int mid = (start + end)/2; 
    type.insertToTree(arr[mid]); 
    node.left = sortedArrayToBST(arr, start, mid - 1); 
    node.right = sortedArrayToBST(arr, mid + 1, end); 
} 

나는이 때문에 디버깅을해야 할 수도 있습니다 실행하려했으나하지 않은 나는 근본적인 아이디어가 견고하다고 생각한다. 희망이 도움이!