unix2dos
This commit is contained in:
parent
690d96b8c4
commit
4751a42167
05/src
main/java/ch/zhaw/ads
test/java/ch/zhaw/ads
@ -1,130 +1,130 @@
|
|||||||
package Praktikum_05_Code;
|
package Praktikum_05_Code;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class SortedBinaryTree<T extends Comparable<T>> implements Tree<T> {
|
public class SortedBinaryTree<T extends Comparable<T>> implements Tree<T> {
|
||||||
protected TreeNode<T> root;
|
protected TreeNode<T> root;
|
||||||
|
|
||||||
private TreeNode<T> insertAt(TreeNode<T> node, T x) {
|
private TreeNode<T> insertAt(TreeNode<T> node, T x) {
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
return new TreeNode<T>(x);
|
return new TreeNode<T>(x);
|
||||||
} else {
|
} else {
|
||||||
if (x.compareTo(node.element) <= 0) {
|
if (x.compareTo(node.element) <= 0) {
|
||||||
node.left = insertAt(node.left, x);
|
node.left = insertAt(node.left, x);
|
||||||
} else {
|
} else {
|
||||||
node.right = insertAt(node.right, x);
|
node.right = insertAt(node.right, x);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(T x) {
|
public void add(T x) {
|
||||||
root = insertAt(root, x);
|
root = insertAt(root, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
// find node to replace
|
// find node to replace
|
||||||
private TreeNode<T> findRepAt(TreeNode<T> node, TreeNode<T> rep) {
|
private TreeNode<T> findRepAt(TreeNode<T> node, TreeNode<T> rep) {
|
||||||
if (node.right != null) {
|
if (node.right != null) {
|
||||||
node.right = findRepAt(node.right,rep);
|
node.right = findRepAt(node.right,rep);
|
||||||
} else {
|
} else {
|
||||||
rep.element = node.element;
|
rep.element = node.element;
|
||||||
node = node.left;
|
node = node.left;
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove node
|
// remove node
|
||||||
private TreeNode<T> removeAt(TreeNode<T> node, T x,TreeNode<T> removed ) {
|
private TreeNode<T> removeAt(TreeNode<T> node, T x,TreeNode<T> removed ) {
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
if (x.compareTo(node.element) == 0) {
|
if (x.compareTo(node.element) == 0) {
|
||||||
// found
|
// found
|
||||||
removed.element = node.element;
|
removed.element = node.element;
|
||||||
if (node.left == null) {
|
if (node.left == null) {
|
||||||
node = node.right;
|
node = node.right;
|
||||||
} else if (node.right == null) {
|
} else if (node.right == null) {
|
||||||
node = node.left;
|
node = node.left;
|
||||||
} else {
|
} else {
|
||||||
node.left = findRepAt(node.left,node);
|
node.left = findRepAt(node.left,node);
|
||||||
}
|
}
|
||||||
} else if (x.compareTo(node.element) < 0) {
|
} else if (x.compareTo(node.element) < 0) {
|
||||||
// search left
|
// search left
|
||||||
node.left = removeAt(node.left, x, removed);
|
node.left = removeAt(node.left, x, removed);
|
||||||
} else {
|
} else {
|
||||||
// search right
|
// search right
|
||||||
node.right = removeAt(node.right, x, removed);
|
node.right = removeAt(node.right, x, removed);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public T remove(T x) {
|
public T remove(T x) {
|
||||||
TreeNode<T> removed = new TreeNode<T>(null);
|
TreeNode<T> removed = new TreeNode<T>(null);
|
||||||
root = removeAt(root, x, removed);
|
root = removeAt(root, x, removed);
|
||||||
return removed.element;
|
return removed.element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return root == null;
|
return root == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Traversal<T> traversal() {
|
public Traversal<T> traversal() {
|
||||||
// to be implemented
|
// to be implemented
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int calcHeight(TreeNode<T> node) {
|
protected int calcHeight(TreeNode<T> node) {
|
||||||
// to be implemented
|
// to be implemented
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected int calcSize(TreeNode p) {
|
protected int calcSize(TreeNode p) {
|
||||||
// to be implemented
|
// to be implemented
|
||||||
}
|
}
|
||||||
|
|
||||||
public int height() {
|
public int height() {
|
||||||
return calcHeight(root);
|
return calcHeight(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int size() {
|
public int size() {
|
||||||
return calcSize(root);
|
return calcSize(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean balanced() {
|
public boolean balanced() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
// only for testing and debugging purposes: show the structure of the tree
|
// only for testing and debugging purposes: show the structure of the tree
|
||||||
public String printTree() {
|
public String printTree() {
|
||||||
StringBuilder out = new StringBuilder();
|
StringBuilder out = new StringBuilder();
|
||||||
if (root.right != null) {
|
if (root.right != null) {
|
||||||
printTree(root.right,out, true, "");
|
printTree(root.right,out, true, "");
|
||||||
}
|
}
|
||||||
out.append(root.element+"\n");
|
out.append(root.element+"\n");
|
||||||
if (root.left != null) {
|
if (root.left != null) {
|
||||||
printTree(root.left,out, false, "");
|
printTree(root.left,out, false, "");
|
||||||
}
|
}
|
||||||
return out.toString();
|
return out.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printTree(TreeNode node, StringBuilder out, boolean isRight, String indent) {
|
private void printTree(TreeNode node, StringBuilder out, boolean isRight, String indent) {
|
||||||
if (node.right != null) {
|
if (node.right != null) {
|
||||||
printTree(node.right, out, true,
|
printTree(node.right, out, true,
|
||||||
indent + (isRight ? " " : " | "));
|
indent + (isRight ? " " : " | "));
|
||||||
}
|
}
|
||||||
out.append(indent);
|
out.append(indent);
|
||||||
if (isRight) {
|
if (isRight) {
|
||||||
out.append(" /");
|
out.append(" /");
|
||||||
} else {
|
} else {
|
||||||
out.append(" \\");
|
out.append(" \\");
|
||||||
}
|
}
|
||||||
out.append("----- ");
|
out.append("----- ");
|
||||||
out.append(node.element+"\n");
|
out.append(node.element+"\n");
|
||||||
if (node.left != null) {
|
if (node.left != null) {
|
||||||
printTree(node.left, out, false,
|
printTree(node.left, out, false,
|
||||||
indent + (isRight ? " | " : " "));
|
indent + (isRight ? " | " : " "));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package Praktikum_05_Code;
|
package Praktikum_05_Code;
|
||||||
|
|
||||||
/* interface of Traversal ADT */
|
/* interface of Traversal ADT */
|
||||||
public interface Traversal<T> {
|
public interface Traversal<T> {
|
||||||
/* traverse elements of tree in preorder */
|
/* traverse elements of tree in preorder */
|
||||||
public void preorder(Visitor<T> vistor);
|
public void preorder(Visitor<T> vistor);
|
||||||
/* traverse elements of tree in inorder */
|
/* traverse elements of tree in inorder */
|
||||||
public void inorder(Visitor<T> vistor);
|
public void inorder(Visitor<T> vistor);
|
||||||
/* traverse elements of tree in postorder */
|
/* traverse elements of tree in postorder */
|
||||||
public void postorder(Visitor<T> vistor);
|
public void postorder(Visitor<T> vistor);
|
||||||
/* traverse elements of tree in levelorder */
|
/* traverse elements of tree in levelorder */
|
||||||
public void levelorder(Visitor<T> vistor);
|
public void levelorder(Visitor<T> vistor);
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
package Praktikum_05_Code;
|
package Praktikum_05_Code;
|
||||||
|
|
||||||
/* interface of Tree ADT */
|
/* interface of Tree ADT */
|
||||||
public interface Tree<T> {
|
public interface Tree<T> {
|
||||||
/* add an element to the tree */
|
/* add an element to the tree */
|
||||||
void add(T o);
|
void add(T o);
|
||||||
/* remove an element; returns the element if found else return null */
|
/* remove an element; returns the element if found else return null */
|
||||||
T remove(T o);
|
T remove(T o);
|
||||||
/* test if tree is empty */
|
/* test if tree is empty */
|
||||||
boolean isEmpty();
|
boolean isEmpty();
|
||||||
/* returns instance of class that implements traversal interface */
|
/* returns instance of class that implements traversal interface */
|
||||||
Traversal<T> traversal();
|
Traversal<T> traversal();
|
||||||
/* number of elements */
|
/* number of elements */
|
||||||
int size();
|
int size();
|
||||||
/* height of the tree */
|
/* height of the tree */
|
||||||
int height();
|
int height();
|
||||||
/* is the tree balanced */
|
/* is the tree balanced */
|
||||||
boolean balanced();
|
boolean balanced();
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
package Praktikum_05_Code;
|
package Praktikum_05_Code;
|
||||||
|
|
||||||
class TreeNode<T extends Comparable<T>> {
|
class TreeNode<T extends Comparable<T>> {
|
||||||
T element;
|
T element;
|
||||||
TreeNode left, right;
|
TreeNode left, right;
|
||||||
int height;
|
int height;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
TreeNode(T element){
|
TreeNode(T element){
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.count = 1;
|
this.count = 1;
|
||||||
this.height = 1;
|
this.height = 1;
|
||||||
}
|
}
|
||||||
TreeNode(T element, TreeNode left, TreeNode right){
|
TreeNode(T element, TreeNode left, TreeNode right){
|
||||||
this(element); this.left = left; this.right = right;
|
this(element); this.left = left; this.right = right;
|
||||||
}
|
}
|
||||||
|
|
||||||
T getValue(){return element;}
|
T getValue(){return element;}
|
||||||
}
|
}
|
@ -1,23 +1,23 @@
|
|||||||
package Praktikum_05_Code;
|
package Praktikum_05_Code;
|
||||||
|
|
||||||
public class TreeTraversal<T extends Comparable<T>> implements Traversal<T> {
|
public class TreeTraversal<T extends Comparable<T>> implements Traversal<T> {
|
||||||
|
|
||||||
private TreeNode<T> root;
|
private TreeNode<T> root;
|
||||||
|
|
||||||
public TreeTraversal(TreeNode<T> root) {
|
public TreeTraversal(TreeNode<T> root) {
|
||||||
this.root = root;
|
this.root = root;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void inorder(Visitor<T> vis) {
|
public void inorder(Visitor<T> vis) {
|
||||||
// to be done
|
// to be done
|
||||||
}
|
}
|
||||||
|
|
||||||
public void preorder(Visitor<T> vis) {
|
public void preorder(Visitor<T> vis) {
|
||||||
// to be done
|
// to be done
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postorder(Visitor<T> vis) {
|
public void postorder(Visitor<T> vis) {
|
||||||
// to be done
|
// to be done
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package Praktikum_05_Code;
|
package Praktikum_05_Code;
|
||||||
|
|
||||||
/* interface of visitor ADT */
|
/* interface of visitor ADT */
|
||||||
public interface Visitor<T> {
|
public interface Visitor<T> {
|
||||||
/* called for each element in the tree */
|
/* called for each element in the tree */
|
||||||
public void visit(T obj);
|
public void visit(T obj);
|
||||||
}
|
}
|
||||||
|
@ -1,63 +1,63 @@
|
|||||||
package Praktikum_05_Code;
|
package Praktikum_05_Code;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
public class TreeTest {
|
public class TreeTest {
|
||||||
Tree<String> tree;
|
Tree<String> tree;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
tree = new SortedBinaryTree<String>();
|
tree = new SortedBinaryTree<String>();
|
||||||
tree.add("B");
|
tree.add("B");
|
||||||
tree.add("A");
|
tree.add("A");
|
||||||
tree.add("C");
|
tree.add("C");
|
||||||
tree.add("D");
|
tree.add("D");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInorder() {
|
public void testInorder() {
|
||||||
Visitor<String> v = new MyVisitor<String>();
|
Visitor<String> v = new MyVisitor<String>();
|
||||||
tree.traversal().inorder(v);
|
tree.traversal().inorder(v);
|
||||||
assertEquals("inorder", "ABCD", v.toString());
|
assertEquals("inorder", "ABCD", v.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPreorder() {
|
public void testPreorder() {
|
||||||
Visitor<String> v = new MyVisitor<String>();
|
Visitor<String> v = new MyVisitor<String>();
|
||||||
tree.traversal().preorder(v);
|
tree.traversal().preorder(v);
|
||||||
assertEquals("preorder", "BACD", v.toString());
|
assertEquals("preorder", "BACD", v.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPostorder() {
|
public void testPostorder() {
|
||||||
Visitor<String> v = new MyVisitor<String>();
|
Visitor<String> v = new MyVisitor<String>();
|
||||||
tree.traversal().postorder(v);
|
tree.traversal().postorder(v);
|
||||||
assertEquals("postorder", "ADCB", v.toString());
|
assertEquals("postorder", "ADCB", v.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLevelorder() {
|
public void testLevelorder() {
|
||||||
Visitor<String> v = new MyVisitor<String>();
|
Visitor<String> v = new MyVisitor<String>();
|
||||||
tree.traversal().levelorder(v);
|
tree.traversal().levelorder(v);
|
||||||
assertEquals("levelorder", "BACD", v.toString());
|
assertEquals("levelorder", "BACD", v.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class MyVisitor<T> implements Visitor<T> {
|
class MyVisitor<T> implements Visitor<T> {
|
||||||
StringBuilder output;
|
StringBuilder output;
|
||||||
|
|
||||||
MyVisitor() {
|
MyVisitor() {
|
||||||
output = new StringBuilder();
|
output = new StringBuilder();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void visit(T s) {
|
public void visit(T s) {
|
||||||
output.append(s);
|
output.append(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return output.toString();
|
return output.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user