如何在 Java 中打印二叉树,以便输出如下:
4
/ \
2 5
我的节点:
public class Node<A extends Comparable> {
Node<A> left, right;
A data;
public Node(A data){
this.data = data;
}
}
原文由 Tian 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 Java 中打印二叉树,以便输出如下:
4
/ \
2 5
我的节点:
public class Node<A extends Comparable> {
Node<A> left, right;
A data;
public Node(A data){
this.data = data;
}
}
原文由 Tian 发布,翻译遵循 CC BY-SA 4.0 许可协议
按行打印一棵 [大] 树。
输出示例:
z
├── c
│ ├── a
│ └── b
├── d
├── e
│ └── asdf
└── f
代码:
public class TreeNode {
final String name;
final List<TreeNode> children;
public TreeNode(String name, List<TreeNode> children) {
this.name = name;
this.children = children;
}
public String toString() {
StringBuilder buffer = new StringBuilder(50);
print(buffer, "", "");
return buffer.toString();
}
private void print(StringBuilder buffer, String prefix, String childrenPrefix) {
buffer.append(prefix);
buffer.append(name);
buffer.append('\n');
for (Iterator<TreeNode> it = children.iterator(); it.hasNext();) {
TreeNode next = it.next();
if (it.hasNext()) {
next.print(buffer, childrenPrefix + "├── ", childrenPrefix + "│ ");
} else {
next.print(buffer, childrenPrefix + "└── ", childrenPrefix + " ");
}
}
}
}
PS 这个答案并不完全关注“二叉”树——相反,它打印了所有种类的树。解决方案的灵感来自 linux 中的“tree”命令。
原文由 VasiliNovikov 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.1k 阅读
8 回答6.3k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
我创建了简单的二叉树打印机。您可以根据需要使用和修改它,但无论如何它都没有优化。我认为这里可以改进很多东西;)
输出 1:
输出 2: