java - 如何直观地打印非二叉树?

标签 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);
    }

并使用这个类

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

或类似的东西。

最佳答案

打印树的一种快速而肮脏的方法是将这样的方法添加到您的 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 +(节点与根的连接数)。它指示节点在输出中缩进多少。

然后可以通过打印根来打印树(根的层级为1):

a.print(1);

得到这样的输出:

root
    n1
    n2
    n3
        n4
            n5

关于java - 如何直观地打印非二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383473/

相关文章:

java - 解决包 org.geoserver.wcs.kvp 中的依赖关系

java - 如何使用 socks 配置 Android SDK 管理器?

tree - 我如何反序列化 Rust 中的引用树?

php - 我需要一个提示才能开始这个编程难题

java - android应用程序中的xml解析文件存储在哪里

java - 出于 OSGI 目的将 jfxrt 移至 lib/ext

java - Android 如何标记一个句子

c++ - Qt中如何绘制数据流图?

java - 返回有 2 个子节点的节点数

java - 红黑树-黑色高度限制