如何直观地打印NON二叉树?

Rya*_*ith 2 java tree

我创建了一个基本树,其中所有节点都有一个名称和一组子节点.

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);
    }
Run Code Online (Sandbox Code Playgroud)

并使用这个类

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);
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,但我想要树的视觉表示,以便我可以快速测试,看看孩子和节点是否在正确的位置.

我正在尝试使输出看起来像这样:在此输入图像描述

或类似的东西.

Cin*_*nam 5

打印树的快速而肮脏的方法将涉及向您的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

level表示树中节点的级别,定义为1 + (the number of connections between the node and the root).它决定了节点在输出中缩进的程度.

然后你可以通过打印根打印树(根的级别是1):

a.print(1);
Run Code Online (Sandbox Code Playgroud)

得到这样的输出:

root
    n1
    n2
    n3
        n4
            n5
Run Code Online (Sandbox Code Playgroud)