| 5 | import java.util.List; |
| 6 | |
| 7 | public class BTreePrinter { |
| 8 | |
| 9 | public static <T extends Comparable<?>> void printNode(TreeNode root) { |
| 10 | int maxLevel = BTreePrinter.maxLevel(root); |
| 11 | |
| 12 | printNodeInternal(Collections.singletonList(root), 1, maxLevel); |
| 13 | } |
| 14 | |
| 15 | private static <T extends Comparable<?>> void printNodeInternal(List<TreeNode> nodes, int level, int maxLevel) { |
| 16 | if (nodes.isEmpty() || BTreePrinter.isAllElementsNull(nodes)) |
| 17 | return; |
| 18 | |
| 19 | int floor = maxLevel - level; |
| 20 | int endgeLines = (int) Math.pow(2, (Math.max(floor - 1, 0))); |
| 21 | int firstSpaces = (int) Math.pow(2, (floor)) - 1; |
| 22 | int betweenSpaces = (int) Math.pow(2, (floor + 1)) - 1; |
| 23 | |
| 24 | BTreePrinter.printWhitespaces(firstSpaces); |
| 25 | |
| 26 | List<TreeNode> newNodes = new ArrayList<TreeNode>(); |
| 27 | for (TreeNode node : nodes) { |
| 28 | if (node != null) { |
| 29 | System.out.print(node.data); |
| 30 | newNodes.add(node.left); |
| 31 | newNodes.add(node.right); |
| 32 | } else { |
| 33 | newNodes.add(null); |
| 34 | newNodes.add(null); |
| 35 | System.out.print(" "); |
| 36 | } |
| 37 | |
| 38 | BTreePrinter.printWhitespaces(betweenSpaces); |
| 39 | } |
| 40 | System.out.println(""); |
| 41 | |
| 42 | for (int i = 1; i <= endgeLines; i++) { |
| 43 | for (int j = 0; j < nodes.size(); j++) { |
| 44 | BTreePrinter.printWhitespaces(firstSpaces - i); |
| 45 | if (nodes.get(j) == null) { |
| 46 | BTreePrinter.printWhitespaces(endgeLines + endgeLines + i + 1); |
| 47 | continue; |
| 48 | } |
| 49 | |
| 50 | if (nodes.get(j).left != null) |
| 51 | System.out.print("/"); |
| 52 | else |
| 53 | BTreePrinter.printWhitespaces(1); |
| 54 | |
| 55 | BTreePrinter.printWhitespaces(i + i - 1); |
| 56 | |
| 57 | if (nodes.get(j).right != null) |
| 58 | System.out.print("\\"); |
| 59 | else |
| 60 | BTreePrinter.printWhitespaces(1); |
| 61 | |
| 62 | BTreePrinter.printWhitespaces(endgeLines + endgeLines - i); |
| 63 | } |
| 64 |
nothing calls this directly
no outgoing calls
no test coverage detected