2015-10-28 3 views
2

Я создал базовое дерево, где все узлы имеют имя и набор дочерних элементов.Как визуально распечатать NON двоичное дерево?

public class Tree { 
    String data; 
    Tree parent = null; 
    HashSet children = new HashSet(); 

    public Tree(String nodeName) { 
     this.data = nodeName; 
    } 

    public void parent(Tree parent) { 
     this.parent = parent 
    } 

    public void addAChild(Tree child) { 
     this.children.add(child); 
     child.parent(this); 
    } 

И использовать этот класс

Tree a = new Tree("root"); 
Tree b = new Tree("n1"); 
Tree c = new Tree("n2"); 
Tree d = new Tree("n3"); 
Tree e = new Tree("n4"); 
Tree f = new Tree("n5"); 

a.addAChild(b); 
a.addAChild(c); 
a.addAChild(d); 

d.addAChild(e); 
e.addAChild(f); 

Это имеет смысл для меня, но я хотел бы визуальное представление дерева, так что я могу быстро проверить, чтобы увидеть, если дети и узлы в в нужном месте.

Я пытаюсь сделать выходной выглядеть следующим образом: enter image description here

Или что-то подобное.

+0

Когда вы говорите печати, вы имеете в виду в командной строке? Если это возможно, вы должны попробовать распечатать его, как дерево каталогов. – Linus

+0

«Или что-то подобное» - Вы имеете в виду, что это должно быть графическое представительство? Или было бы отступом представление, которое вы можете найти в файловых браузерах, в порядке? – laune

+0

Я ищу вывод командной строки, чтобы я мог видеть, находятся ли узлы в правильных положениях. И @Linus да, я верю, что то, что у меня здесь, похоже на дерево каталогов, я просмотрю его. –

ответ

4

быстрый и грязный способ печати дерева предполагает добавление метода, как это ваш Tree класс:

public void print(int level) { 
    for (int i = 1; i < level; i++) { 
     System.out.print("\t"); 
    } 
    System.out.println(data); 
    for (Tree child : children) { 
     child.print(level + 1); 
    } 
} 

level представляет уровень узла в дереве, которое определяется как 1 + (the number of connections between the node and the root). Это диктует, насколько узел будет отступом в выходе.

Затем вы можете распечатать дерево, напечатав корень (уровень корня 1):

a.print(1); 

Получение вывода, как это:

root 
    n1 
    n2 
    n3 
     n4 
      n5 
+1

Этот ответ был действительно полезен. Однако я бы изменил «indent» для «level», так как уровень в дереве - это реальный смысл вкладок. – randombee

+0

@ randombee Хорошая точка, спасибо. Я также изменил номера соответственно, так как root имеет уровень 1. – Cinnam

Смежные вопросы