MCPcopy Create free account
hub / github.com/careercup/ctci / BTreePrinter

Class BTreePrinter

java/CtCILibrary/CtCILibrary/BTreePrinter.java:7–92  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5import java.util.List;
6
7public 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

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected