Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I've created simple binary tree printer. You can use and modify it as you want, but it's not optimized anyway. I think that a lot of things can be improved here ;)</p> <pre><code>import java.util.ArrayList; import java.util.Collections; import java.util.List; public class BTreePrinterTest { private static Node&lt;Integer&gt; test1() { Node&lt;Integer&gt; root = new Node&lt;Integer&gt;(2); Node&lt;Integer&gt; n11 = new Node&lt;Integer&gt;(7); Node&lt;Integer&gt; n12 = new Node&lt;Integer&gt;(5); Node&lt;Integer&gt; n21 = new Node&lt;Integer&gt;(2); Node&lt;Integer&gt; n22 = new Node&lt;Integer&gt;(6); Node&lt;Integer&gt; n23 = new Node&lt;Integer&gt;(3); Node&lt;Integer&gt; n24 = new Node&lt;Integer&gt;(6); Node&lt;Integer&gt; n31 = new Node&lt;Integer&gt;(5); Node&lt;Integer&gt; n32 = new Node&lt;Integer&gt;(8); Node&lt;Integer&gt; n33 = new Node&lt;Integer&gt;(4); Node&lt;Integer&gt; n34 = new Node&lt;Integer&gt;(5); Node&lt;Integer&gt; n35 = new Node&lt;Integer&gt;(8); Node&lt;Integer&gt; n36 = new Node&lt;Integer&gt;(4); Node&lt;Integer&gt; n37 = new Node&lt;Integer&gt;(5); Node&lt;Integer&gt; n38 = new Node&lt;Integer&gt;(8); root.left = n11; root.right = n12; n11.left = n21; n11.right = n22; n12.left = n23; n12.right = n24; n21.left = n31; n21.right = n32; n22.left = n33; n22.right = n34; n23.left = n35; n23.right = n36; n24.left = n37; n24.right = n38; return root; } private static Node&lt;Integer&gt; test2() { Node&lt;Integer&gt; root = new Node&lt;Integer&gt;(2); Node&lt;Integer&gt; n11 = new Node&lt;Integer&gt;(7); Node&lt;Integer&gt; n12 = new Node&lt;Integer&gt;(5); Node&lt;Integer&gt; n21 = new Node&lt;Integer&gt;(2); Node&lt;Integer&gt; n22 = new Node&lt;Integer&gt;(6); Node&lt;Integer&gt; n23 = new Node&lt;Integer&gt;(9); Node&lt;Integer&gt; n31 = new Node&lt;Integer&gt;(5); Node&lt;Integer&gt; n32 = new Node&lt;Integer&gt;(8); Node&lt;Integer&gt; n33 = new Node&lt;Integer&gt;(4); root.left = n11; root.right = n12; n11.left = n21; n11.right = n22; n12.right = n23; n22.left = n31; n22.right = n32; n23.left = n33; return root; } public static void main(String[] args) { BTreePrinter.printNode(test1()); BTreePrinter.printNode(test2()); } } class Node&lt;T extends Comparable&lt;?&gt;&gt; { Node&lt;T&gt; left, right; T data; public Node(T data) { this.data = data; } } class BTreePrinter { public static &lt;T extends Comparable&lt;?&gt;&gt; void printNode(Node&lt;T&gt; root) { int maxLevel = BTreePrinter.maxLevel(root); printNodeInternal(Collections.singletonList(root), 1, maxLevel); } private static &lt;T extends Comparable&lt;?&gt;&gt; void printNodeInternal(List&lt;Node&lt;T&gt;&gt; nodes, int level, int maxLevel) { if (nodes.isEmpty() || BTreePrinter.isAllElementsNull(nodes)) return; int floor = maxLevel - level; int endgeLines = (int) Math.pow(2, (Math.max(floor - 1, 0))); int firstSpaces = (int) Math.pow(2, (floor)) - 1; int betweenSpaces = (int) Math.pow(2, (floor + 1)) - 1; BTreePrinter.printWhitespaces(firstSpaces); List&lt;Node&lt;T&gt;&gt; newNodes = new ArrayList&lt;Node&lt;T&gt;&gt;(); for (Node&lt;T&gt; node : nodes) { if (node != null) { System.out.print(node.data); newNodes.add(node.left); newNodes.add(node.right); } else { newNodes.add(null); newNodes.add(null); System.out.print(" "); } BTreePrinter.printWhitespaces(betweenSpaces); } System.out.println(""); for (int i = 1; i &lt;= endgeLines; i++) { for (int j = 0; j &lt; nodes.size(); j++) { BTreePrinter.printWhitespaces(firstSpaces - i); if (nodes.get(j) == null) { BTreePrinter.printWhitespaces(endgeLines + endgeLines + i + 1); continue; } if (nodes.get(j).left != null) System.out.print("/"); else BTreePrinter.printWhitespaces(1); BTreePrinter.printWhitespaces(i + i - 1); if (nodes.get(j).right != null) System.out.print("\\"); else BTreePrinter.printWhitespaces(1); BTreePrinter.printWhitespaces(endgeLines + endgeLines - i); } System.out.println(""); } printNodeInternal(newNodes, level + 1, maxLevel); } private static void printWhitespaces(int count) { for (int i = 0; i &lt; count; i++) System.out.print(" "); } private static &lt;T extends Comparable&lt;?&gt;&gt; int maxLevel(Node&lt;T&gt; node) { if (node == null) return 0; return Math.max(BTreePrinter.maxLevel(node.left), BTreePrinter.maxLevel(node.right)) + 1; } private static &lt;T&gt; boolean isAllElementsNull(List&lt;T&gt; list) { for (Object object : list) { if (object != null) return false; } return true; } } </code></pre> <p>Output 1 :</p> <pre><code> 2 / \ / \ / \ / \ 7 5 / \ / \ / \ / \ 2 6 3 6 / \ / \ / \ / \ 5 8 4 5 8 4 5 8 </code></pre> <p>Output 2 :</p> <pre><code> 2 / \ / \ / \ / \ 7 5 / \ \ / \ \ 2 6 9 / \ / 5 8 4 </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload