public void printTree(BSTNode node, int depth) { if (depth > 0) { TreeString treeString = treeStringFromBSTNode(node, depth); for (int i = 0; i < treeString.getLineCount(); ++i) { System.out.println(treeString.getLine(i)); } } } public TreeString treeStringFromString(String string) { return new TreeString(Collections.singletonList(string), string.length(), string.length() / 2); } public TreeString treeStringFromBSTNode(BSTNode node, int depth) { TreeString value = treeStringFromString(String.valueOf(node.getValue())); TreeString left = depth <= 1 || node.getLeft() == null ? null : treeStringFromBSTNode(node.getLeft(), depth - 1); TreeString right = depth <= 1 || node.getRight() == null ? null : treeStringFromBSTNode(node.getRight(), depth - 1); return combineTreeStrings(value, left, right); }