Add files for exercise 5
This commit is contained in:
parent
389d29c66b
commit
aecc499585
13 changed files with 3716 additions and 0 deletions
3166
RangZuerich.csv
Normal file
3166
RangZuerich.csv
Normal file
File diff suppressed because it is too large
Load diff
20
app/src/main/java/ch/nuth/zhaw/exbox/MyVisitor.java
Normal file
20
app/src/main/java/ch/nuth/zhaw/exbox/MyVisitor.java
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MyVisitor -- Diese Klasse wird für die Tests verwendet
|
||||||
|
*/
|
||||||
|
class MyVisitor<T> implements Visitor<T> {
|
||||||
|
StringBuilder output;
|
||||||
|
|
||||||
|
MyVisitor() {
|
||||||
|
output = new StringBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void visit(T s) {
|
||||||
|
output.append(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return output.toString();
|
||||||
|
}
|
||||||
|
}
|
38
app/src/main/java/ch/nuth/zhaw/exbox/RankingTreeServer.java
Normal file
38
app/src/main/java/ch/nuth/zhaw/exbox/RankingTreeServer.java
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
public class RankingTreeServer implements CommandExecutor {
|
||||||
|
|
||||||
|
public Tree<Competitor> createTree(String rankingText) {
|
||||||
|
// TODO Implement
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String createSortedText(Tree<Competitor> competitorTree) {
|
||||||
|
AtomicInteger rank = new AtomicInteger(1);
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
competitorTree.traversal(); // TODO Implement
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String execute(String rankingList) {
|
||||||
|
Tree<Competitor> competitorTree = createTree(rankingList);
|
||||||
|
return "Rangliste (Tree)\n" + createSortedText(competitorTree);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String rangliste = "Mueller Stefan;02:31:14\n" +
|
||||||
|
"Marti Adrian;02:30:09\n" +
|
||||||
|
"Kiptum Daniel;02:11:31\n" +
|
||||||
|
"Ancay Tarcis;02:20:02\n" +
|
||||||
|
"Kreibuhl Christian;02:21:47\n" +
|
||||||
|
"Ott Michael;02:33:48\n" +
|
||||||
|
"Menzi Christoph;02:27:26\n" +
|
||||||
|
"Oliver Ruben;02:32:12\n" +
|
||||||
|
"Elmer Beat;02:33:53\n" +
|
||||||
|
"Kuehni Martin;02:33:36\n";
|
||||||
|
RankingTreeServer server = new RankingTreeServer();
|
||||||
|
System.out.println(server.execute(rangliste));
|
||||||
|
}
|
||||||
|
}
|
128
app/src/main/java/ch/nuth/zhaw/exbox/SortedBinaryTree.java
Normal file
128
app/src/main/java/ch/nuth/zhaw/exbox/SortedBinaryTree.java
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
public class SortedBinaryTree<T extends Comparable<T>> implements Tree<T> {
|
||||||
|
protected TreeNode<T> root;
|
||||||
|
|
||||||
|
private TreeNode<T> insertAt(TreeNode<T> node, T x) {
|
||||||
|
if (node == null) {
|
||||||
|
return new TreeNode<T>(x);
|
||||||
|
} else {
|
||||||
|
if (x.compareTo(node.getValue()) <= 0) {
|
||||||
|
node.left = insertAt(node.left, x);
|
||||||
|
} else {
|
||||||
|
node.right = insertAt(node.right, x);
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(T x) {
|
||||||
|
root = insertAt(root, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
// find node to replace
|
||||||
|
private TreeNode<T> findRepAt(TreeNode<T> node, TreeNode<T> rep) {
|
||||||
|
if (node.right != null) {
|
||||||
|
node.right = findRepAt(node.right, rep);
|
||||||
|
} else {
|
||||||
|
rep.values = node.values;
|
||||||
|
node = node.left;
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove node
|
||||||
|
private TreeNode<T> removeAt(TreeNode<T> node, T x, TreeNode<T> removed) {
|
||||||
|
if (node == null) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
if (x.compareTo(node.getValue()) == 0) {
|
||||||
|
// found
|
||||||
|
removed.values = node.values;
|
||||||
|
if (node.left == null) {
|
||||||
|
node = node.right;
|
||||||
|
} else if (node.right == null) {
|
||||||
|
node = node.left;
|
||||||
|
} else {
|
||||||
|
node.left = findRepAt(node.left, node);
|
||||||
|
}
|
||||||
|
} else if (x.compareTo(node.getValue()) < 0) {
|
||||||
|
// search left
|
||||||
|
node.left = removeAt(node.left, x, removed);
|
||||||
|
} else {
|
||||||
|
// search right
|
||||||
|
node.right = removeAt(node.right, x, removed);
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T remove(T x) {
|
||||||
|
TreeNode<T> removed = new TreeNode<T>(null);
|
||||||
|
root = removeAt(root, x, removed);
|
||||||
|
return removed.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return root == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Traversal<T> traversal() {
|
||||||
|
// TODO Implement
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int calcHeight(TreeNode<T> node) {
|
||||||
|
// TODO Implement
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int height() {
|
||||||
|
return calcHeight(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int calcSize(TreeNode<T> p) {
|
||||||
|
// TODO Implement
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return calcSize(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean balanced() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// only for testing and debugging: show the structure of the tree
|
||||||
|
public String printTree() {
|
||||||
|
StringBuilder out = new StringBuilder();
|
||||||
|
if (root.right != null) {
|
||||||
|
printTree(root.right, out, true, "");
|
||||||
|
}
|
||||||
|
out.append(root.values).append("\n");
|
||||||
|
if (root.left != null) {
|
||||||
|
printTree(root.left, out, false, "");
|
||||||
|
}
|
||||||
|
return out.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void printTree(TreeNode<T> node, StringBuilder out, boolean isRight, String indent) {
|
||||||
|
if (node.right != null) {
|
||||||
|
printTree(node.right, out, true,
|
||||||
|
indent + (isRight ? " " : " | "));
|
||||||
|
}
|
||||||
|
out.append(indent);
|
||||||
|
if (isRight) {
|
||||||
|
out.append(" /");
|
||||||
|
} else {
|
||||||
|
out.append(" \\");
|
||||||
|
}
|
||||||
|
out.append("----- ");
|
||||||
|
out.append(node.values).append("\n");
|
||||||
|
if (node.left != null) {
|
||||||
|
printTree(node.left, out, false,
|
||||||
|
indent + (isRight ? " | " : " "));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
app/src/main/java/ch/nuth/zhaw/exbox/Traversal.java
Normal file
15
app/src/main/java/ch/nuth/zhaw/exbox/Traversal.java
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
/** interface of Traversal ADT */
|
||||||
|
public interface Traversal<T> {
|
||||||
|
/** traverse elements of tree in preorder */
|
||||||
|
void preorder(Visitor<T> vistor);
|
||||||
|
/** traverse elements of tree in inorder */
|
||||||
|
void inorder(Visitor<T> vistor);
|
||||||
|
/** traverse elements of tree in postorder */
|
||||||
|
void postorder(Visitor<T> vistor);
|
||||||
|
/** traverse elements of tree in levelorder */
|
||||||
|
void levelorder(Visitor<T> vistor);
|
||||||
|
/** traverse elements of tree interval */
|
||||||
|
void interval(T min, T max, Visitor<T> vistor);
|
||||||
|
}
|
25
app/src/main/java/ch/nuth/zhaw/exbox/Tree.java
Normal file
25
app/src/main/java/ch/nuth/zhaw/exbox/Tree.java
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
/** interface of Tree ADT */
|
||||||
|
public interface Tree<T extends Comparable<T>> {
|
||||||
|
/** add an element to the tree */
|
||||||
|
void add(T o);
|
||||||
|
|
||||||
|
/** remove an element; returns the element if found else return null */
|
||||||
|
T remove(T o);
|
||||||
|
|
||||||
|
/** test if tree is empty */
|
||||||
|
boolean isEmpty();
|
||||||
|
|
||||||
|
/** returns instance of class that implements traversal interface */
|
||||||
|
Traversal<T> traversal();
|
||||||
|
|
||||||
|
/** number of elements */
|
||||||
|
int size();
|
||||||
|
|
||||||
|
/** height of the tree */
|
||||||
|
int height();
|
||||||
|
|
||||||
|
/** is the tree balanced */
|
||||||
|
boolean balanced();
|
||||||
|
}
|
22
app/src/main/java/ch/nuth/zhaw/exbox/TreeNode.java
Normal file
22
app/src/main/java/ch/nuth/zhaw/exbox/TreeNode.java
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
class TreeNode<T extends Comparable<T>> {
|
||||||
|
List<T> values; // implemented as list because of doublette handling in AVL
|
||||||
|
TreeNode<T> left, right;
|
||||||
|
int height; // for AVL
|
||||||
|
|
||||||
|
TreeNode(T value){
|
||||||
|
this.values = new LinkedList<>();
|
||||||
|
this.values.add(value);
|
||||||
|
this.height = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
TreeNode(T value, TreeNode<T> left, TreeNode<T> right){
|
||||||
|
this(value); this.left = left; this.right = right;
|
||||||
|
}
|
||||||
|
|
||||||
|
T getValue(){return values.get(0);}
|
||||||
|
}
|
33
app/src/main/java/ch/nuth/zhaw/exbox/TreeTraversal.java
Normal file
33
app/src/main/java/ch/nuth/zhaw/exbox/TreeTraversal.java
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
public class TreeTraversal<T extends Comparable<T>> implements Traversal<T> {
|
||||||
|
private final TreeNode<T> root;
|
||||||
|
|
||||||
|
public TreeTraversal(TreeNode<T> root) {
|
||||||
|
this.root = root;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void inorder(Visitor<T> vis) {
|
||||||
|
// TODO Implement
|
||||||
|
}
|
||||||
|
|
||||||
|
public void preorder(Visitor<T> vis) {
|
||||||
|
// TODO Implement
|
||||||
|
}
|
||||||
|
|
||||||
|
public void postorder(Visitor<T> vis) {
|
||||||
|
// TODO Implement
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void levelorder(Visitor<T> vistor) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void interval(T min, T max, Visitor<T> vistor) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
7
app/src/main/java/ch/nuth/zhaw/exbox/Visitor.java
Normal file
7
app/src/main/java/ch/nuth/zhaw/exbox/Visitor.java
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
/** interface of visitor ADT */
|
||||||
|
public interface Visitor<T> {
|
||||||
|
/** called for each element in the tree */
|
||||||
|
void visit(T obj);
|
||||||
|
}
|
84
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_2_test.java
Normal file
84
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_2_test.java
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @(#)TreeTest.java
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author K Rege
|
||||||
|
* @version 1.00 2018/3/17
|
||||||
|
* @version 1.01 2021/8/1
|
||||||
|
*/
|
||||||
|
public class ADS5_2_test {
|
||||||
|
Tree<String> tree;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
tree = new SortedBinaryTree<>();
|
||||||
|
tree.add("B");
|
||||||
|
tree.add("A");
|
||||||
|
tree.add("C");
|
||||||
|
tree.add("D");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInorder() {
|
||||||
|
Visitor<String> v = new MyVisitor<>();
|
||||||
|
tree.traversal().inorder(v);
|
||||||
|
assertEquals("ABCD", v.toString(), "inorder");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPreorder() {
|
||||||
|
Visitor<String> v = new MyVisitor<>();
|
||||||
|
tree.traversal().preorder(v);
|
||||||
|
assertEquals("BACD", v.toString(), "preorder");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPostorder() {
|
||||||
|
Visitor<String> v = new MyVisitor<>();
|
||||||
|
tree.traversal().postorder(v);
|
||||||
|
assertEquals("ADCB", v.toString(), "postorder");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLevelorder() {
|
||||||
|
Visitor<String> v = new MyVisitor<>();
|
||||||
|
tree.traversal().levelorder(v);
|
||||||
|
assertEquals("BACD", v.toString(), "levelorder");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMixed() {
|
||||||
|
Tree<String> tree = new SortedBinaryTree<>();
|
||||||
|
List<String> list = new LinkedList<>();
|
||||||
|
for (int i = 0; i < 1000; i++) {
|
||||||
|
char c = (char) ('A' + (Math.random() * 26));
|
||||||
|
int op = (int) (Math.random() * 2);
|
||||||
|
switch (op) {
|
||||||
|
case 0:
|
||||||
|
list.add(Character.toString(c));
|
||||||
|
tree.add(Character.toString(c));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
list.remove(Character.toString(c));
|
||||||
|
tree.remove(Character.toString(c));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(list);
|
||||||
|
String expected = String.join("", list);
|
||||||
|
Visitor<String> v = new MyVisitor<>();
|
||||||
|
tree.traversal().inorder(v);
|
||||||
|
assertEquals(expected, v.toString(), "mixed");
|
||||||
|
}
|
||||||
|
}
|
61
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_3_test.java
Normal file
61
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_3_test.java
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
public class ADS5_3_test {
|
||||||
|
Tree<Competitor> rankGood;
|
||||||
|
Tree<Competitor> rankTest;
|
||||||
|
String textGood;
|
||||||
|
String textTest;
|
||||||
|
|
||||||
|
public Tree<Competitor> createTree(String rankingText) {
|
||||||
|
Tree<Competitor> competitorTree = new SortedBinaryTree<>();
|
||||||
|
String[] lines = rankingText.split("\n");
|
||||||
|
for (String line : lines) {
|
||||||
|
String name = line.split(";")[0];
|
||||||
|
String time = line.split(";")[1];
|
||||||
|
competitorTree.add(new Competitor(0, name, time));
|
||||||
|
}
|
||||||
|
return competitorTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String createSortedText(Tree<Competitor> competitorTree) {
|
||||||
|
AtomicInteger rank = new AtomicInteger(1);
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
competitorTree.traversal().inorder(c -> {c.setRank(rank.getAndIncrement()); sb.append(c).append("\n");});
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
String rangliste = "Mueller Stefan;02:31:14\n" +
|
||||||
|
"Marti Adrian;02:30:09\n" +
|
||||||
|
"Kiptum Daniel;02:11:31\n" +
|
||||||
|
"Ancay Tarcis;02:20:02\n" +
|
||||||
|
"Kreibuhl Christian;02:21:47\n" +
|
||||||
|
"Ott Michael;02:33:48\n" +
|
||||||
|
"Menzi Christoph;02:27:26\n" +
|
||||||
|
"Oliver Ruben;02:32:12\n" +
|
||||||
|
"Elmer Beat;02:33:53\n" +
|
||||||
|
"Kuehni Martin;02:33:36\n";
|
||||||
|
rankGood = createTree(rangliste);
|
||||||
|
textGood = createSortedText(rankGood);
|
||||||
|
rankTest = new RankingTreeServer().createTree(rangliste);
|
||||||
|
textTest = new RankingTreeServer().createSortedText(rankTest);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateText() {
|
||||||
|
String[] good = textGood.split("\n");
|
||||||
|
String[] test = textTest.split("\n");
|
||||||
|
assertEquals(good.length, test.length, "length");
|
||||||
|
for (int i = 0; i < good.length;i++) {
|
||||||
|
assertEquals(good[i], test[i], "rangliste["+i+"]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
61
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_4_test.java
Normal file
61
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_4_test.java
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @(#)TreeTest.java
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author K Rege
|
||||||
|
* @version 1.00 2018/3/17
|
||||||
|
* @version 1.01 2021/8/1
|
||||||
|
*/
|
||||||
|
public class ADS5_4_test {
|
||||||
|
Tree<String> tree;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
tree = new SortedBinaryTree<>();
|
||||||
|
tree.add("B");
|
||||||
|
tree.add("A");
|
||||||
|
tree.add("C");
|
||||||
|
tree.add("D");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHeight() {
|
||||||
|
assertEquals(3, tree.height(), "height");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSize() {
|
||||||
|
assertEquals(4, tree.size(), "size");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSizeMixed() {
|
||||||
|
Tree<String> tree = new SortedBinaryTree<>();
|
||||||
|
List<String> list = new LinkedList<>();
|
||||||
|
for (int i = 0; i < 1000; i++) {
|
||||||
|
char c = (char) ('A' + (Math.random() * 26));
|
||||||
|
int op = (int) (Math.random() * 2);
|
||||||
|
switch (op) {
|
||||||
|
case 0:
|
||||||
|
list.add(Character.toString(c));
|
||||||
|
tree.add(Character.toString(c));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
list.remove(Character.toString(c));
|
||||||
|
tree.remove(Character.toString(c));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals(list.size(), tree.size());
|
||||||
|
}
|
||||||
|
}
|
56
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_5_test.java
Normal file
56
app/src/test/java/ch/nuth/zhaw/exbox/ADS5_5_test.java
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
package ch.nuth.zhaw.exbox;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @(#)TreeTest.java
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author K Rege
|
||||||
|
* @version 1.00 2018/3/17
|
||||||
|
* @version 1.01 2021/8/1
|
||||||
|
*/
|
||||||
|
public class ADS5_5_test {
|
||||||
|
Tree<String> tree;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp() {
|
||||||
|
tree = new SortedBinaryTree<>();
|
||||||
|
tree.add("B");
|
||||||
|
tree.add("A");
|
||||||
|
tree.add("C");
|
||||||
|
tree.add("D");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInterval() {
|
||||||
|
char left = 'K';
|
||||||
|
char right = 'O';
|
||||||
|
|
||||||
|
for (int i = 0; i < 200; i++) {
|
||||||
|
char c = (char) ('A' + (Math.random() * 26));
|
||||||
|
tree.add(Character.toString(c));
|
||||||
|
}
|
||||||
|
// get all elements with inorder
|
||||||
|
Visitor<String> v = new MyVisitor<>();
|
||||||
|
tree.traversal().inorder(v);
|
||||||
|
int count = 0;
|
||||||
|
String s = v.toString();
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
if (s.charAt(i) >= left && s.charAt(i) <= right) count++;
|
||||||
|
}
|
||||||
|
// now interval
|
||||||
|
v = new MyVisitor<>();
|
||||||
|
tree.traversal().interval(Character.toString(left), Character.toString(right), v);
|
||||||
|
s = v.toString();
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
char c = s.charAt(i);
|
||||||
|
assertTrue(c >= left && c <= right, c + " in interval "+left+" "+right);
|
||||||
|
}
|
||||||
|
assertEquals(count, s.length(), "size");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue