Skip to content

Commit 09886bf

Browse files
committed
feat: document refactoring and refactor of getString
fixes: #43
1 parent adb3de8 commit 09886bf

File tree

1 file changed

+31
-49
lines changed

1 file changed

+31
-49
lines changed

Diff for: src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java

+31-49
Original file line numberDiff line numberDiff line change
@@ -667,65 +667,47 @@ protected static class TreePrinter {
667667
public static <T extends Comparable<T>> String getString(BinarySearchTree<T> tree) {
668668
if (tree.root == null)
669669
return "Tree has no nodes.";
670-
return getString(tree.root, "", true);
670+
return getStringRoot(tree.root, "", true);
671671
}
672672

673-
private static <T extends Comparable<T>> String getString(Node<T> node, String prefix, boolean isTail) {
674-
Scope scope = BranchCoverage.beginScope("BinarySearchTree.TreePrinter.getString", new String[] {
675-
"entry-point",
676-
"parent-exists",
677-
"right-side",
678-
"parent-doesn't-exist",
679-
"has-left-or-right-children",
680-
"has-left-children",
681-
"has-right-children",
682-
"has-children",
683-
"has-following-number-of-children",
684-
"has-multiple-children",
685-
"get-tree-string",
686-
});
687-
688-
scope.reached("entry-point");
673+
private static <T extends Comparable<T>> String getStringRoot(Node<T> node, String prefix, boolean isTail) {
674+
StringBuilder builder = new StringBuilder();
675+
builder.append(prefix + (isTail ? "└── " : "├── ") + node.id + "\n");
676+
List<Node<T>> children = new ArrayList<Node<T>>(2);
677+
if (node.lesser != null || node.greater != null) {
678+
children = new ArrayList<Node<T>>(2);
679+
if (node.lesser != null)
680+
children.add(node.lesser);
681+
if (node.greater != null)
682+
children.add(node.greater);
683+
if (children.size() == 2)
684+
builder.append(getString(node.lesser, prefix + " ", false));
685+
builder.append(getString(children.get(children.size() - 1), prefix + (isTail ? " " : "│ "), true));
686+
}
687+
688+
return builder.toString();
689+
}
689690

691+
private static <T extends Comparable<T>> String getString(Node<T> node, String prefix, boolean isTail) {
690692
StringBuilder builder = new StringBuilder();
691693

692-
if (node.parent != null) {
693-
scope.reached("parent-exists");
694-
String side = "left";
695-
if (node.equals(node.parent.greater)) {
696-
scope.reached("right-side");
697-
side = "right";
698-
}
699-
builder.append(prefix + (isTail ? "└── " : "├── ") + "(" + side + ") " + node.id + "\n");
700-
} else {
701-
scope.reached("parent-doesn't-exist");
702-
builder.append(prefix + (isTail ? "└── " : "├── ") + node.id + "\n");
703-
}
704-
List<Node<T>> children = null;
694+
String side = "left";
695+
if (node.equals(node.parent.greater))
696+
side = "right";
697+
builder.append(prefix + (isTail ? "└── " : "├── ") + "(" + side + ") " + node.id + "\n");
698+
699+
List<Node<T>> children = new ArrayList<Node<T>>(2);
705700
if (node.lesser != null || node.greater != null) {
706-
scope.reached("has-left-or-right-children");
707701
children = new ArrayList<Node<T>>(2);
708-
if (node.lesser != null) {
709-
scope.reached("has-left-children");
702+
if (node.lesser != null)
710703
children.add(node.lesser);
711-
}
712-
if (node.greater != null) {
713-
scope.reached("has-right-children");
704+
if (node.greater != null)
714705
children.add(node.greater);
715-
}
706+
if (children.size() == 2)
707+
builder.append(getString(node.lesser, prefix + "│ ", false));
708+
builder.append(getString(children.get(children.size() - 1), prefix + (isTail ? " " : "│ "), true));
716709
}
717-
if (children != null) {
718-
scope.reached("has-children");
719-
for (int i = 0; i < children.size() - 1; i++) {
720-
scope.reached("has-following-number-of-children");
721-
builder.append(getString(children.get(i), prefix + (isTail ? " " : "│ "), false));
722-
}
723-
if (children.size() >= 1) {
724-
scope.reached("has-multiple-children");
725-
builder.append(getString(children.get(children.size() - 1), prefix + (isTail ? " " : "│ "), true));
726-
}
727-
}
728-
scope.reached("get-tree-string");
710+
729711
return builder.toString();
730712
}
731713
}

0 commit comments

Comments
 (0)