diff --git a/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java b/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java index 194a1c6..430c49b 100644 --- a/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java +++ b/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java @@ -1,130 +1,130 @@ -package Praktikum_05_Code; - -import java.util.*; - -public class SortedBinaryTree> implements Tree { - protected TreeNode root; - - private TreeNode insertAt(TreeNode node, T x) { - if (node == null) { - return new TreeNode(x); - } else { - if (x.compareTo(node.element) <= 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 findRepAt(TreeNode node, TreeNode rep) { - if (node.right != null) { - node.right = findRepAt(node.right,rep); - } else { - rep.element = node.element; - node = node.left; - } - return node; - } - - // remove node - private TreeNode removeAt(TreeNode node, T x,TreeNode removed ) { - if (node == null) { - return null; - } else { - if (x.compareTo(node.element) == 0) { - // found - removed.element = node.element; - 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.element) < 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 removed = new TreeNode(null); - root = removeAt(root, x, removed); - return removed.element; - } - - - public boolean isEmpty() { - return root == null; - } - - public Traversal traversal() { - // to be implemented - } - - protected int calcHeight(TreeNode node) { - // to be implemented - } - - - protected int calcSize(TreeNode p) { - // to be implemented - } - - public int height() { - return calcHeight(root); - } - - public int size() { - return calcSize(root); - } - - public boolean balanced() { - throw new UnsupportedOperationException(); - } - - // only for testing and debugging purposes: 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.element+"\n"); - if (root.left != null) { - printTree(root.left,out, false, ""); - } - return out.toString(); - } - - private void printTree(TreeNode 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.element+"\n"); - if (node.left != null) { - printTree(node.left, out, false, - indent + (isRight ? " | " : " ")); - } - } - -} +package Praktikum_05_Code; + +import java.util.*; + +public class SortedBinaryTree> implements Tree { + protected TreeNode root; + + private TreeNode insertAt(TreeNode node, T x) { + if (node == null) { + return new TreeNode(x); + } else { + if (x.compareTo(node.element) <= 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 findRepAt(TreeNode node, TreeNode rep) { + if (node.right != null) { + node.right = findRepAt(node.right,rep); + } else { + rep.element = node.element; + node = node.left; + } + return node; + } + + // remove node + private TreeNode removeAt(TreeNode node, T x,TreeNode removed ) { + if (node == null) { + return null; + } else { + if (x.compareTo(node.element) == 0) { + // found + removed.element = node.element; + 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.element) < 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 removed = new TreeNode(null); + root = removeAt(root, x, removed); + return removed.element; + } + + + public boolean isEmpty() { + return root == null; + } + + public Traversal traversal() { + // to be implemented + } + + protected int calcHeight(TreeNode node) { + // to be implemented + } + + + protected int calcSize(TreeNode p) { + // to be implemented + } + + public int height() { + return calcHeight(root); + } + + public int size() { + return calcSize(root); + } + + public boolean balanced() { + throw new UnsupportedOperationException(); + } + + // only for testing and debugging purposes: 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.element+"\n"); + if (root.left != null) { + printTree(root.left,out, false, ""); + } + return out.toString(); + } + + private void printTree(TreeNode 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.element+"\n"); + if (node.left != null) { + printTree(node.left, out, false, + indent + (isRight ? " | " : " ")); + } + } + +} diff --git a/05/src/main/java/ch/zhaw/ads/Traversal.java b/05/src/main/java/ch/zhaw/ads/Traversal.java index 37e3cfd..e8cafec 100644 --- a/05/src/main/java/ch/zhaw/ads/Traversal.java +++ b/05/src/main/java/ch/zhaw/ads/Traversal.java @@ -1,13 +1,13 @@ -package Praktikum_05_Code; - -/* interface of Traversal ADT */ -public interface Traversal { - /* traverse elements of tree in preorder */ - public void preorder(Visitor vistor); - /* traverse elements of tree in inorder */ - public void inorder(Visitor vistor); - /* traverse elements of tree in postorder */ - public void postorder(Visitor vistor); - /* traverse elements of tree in levelorder */ - public void levelorder(Visitor vistor); -} +package Praktikum_05_Code; + +/* interface of Traversal ADT */ +public interface Traversal { + /* traverse elements of tree in preorder */ + public void preorder(Visitor vistor); + /* traverse elements of tree in inorder */ + public void inorder(Visitor vistor); + /* traverse elements of tree in postorder */ + public void postorder(Visitor vistor); + /* traverse elements of tree in levelorder */ + public void levelorder(Visitor vistor); +} diff --git a/05/src/main/java/ch/zhaw/ads/Tree.java b/05/src/main/java/ch/zhaw/ads/Tree.java index 7a43e57..0e21633 100644 --- a/05/src/main/java/ch/zhaw/ads/Tree.java +++ b/05/src/main/java/ch/zhaw/ads/Tree.java @@ -1,19 +1,19 @@ -package Praktikum_05_Code; - -/* interface of Tree ADT */ -public interface Tree { - /* 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 traversal(); - /* number of elements */ - int size(); - /* height of the tree */ - int height(); - /* is the tree balanced */ - boolean balanced(); -} +package Praktikum_05_Code; + +/* interface of Tree ADT */ +public interface Tree { + /* 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 traversal(); + /* number of elements */ + int size(); + /* height of the tree */ + int height(); + /* is the tree balanced */ + boolean balanced(); +} diff --git a/05/src/main/java/ch/zhaw/ads/TreeNode.java b/05/src/main/java/ch/zhaw/ads/TreeNode.java index a83522a..20b895b 100644 --- a/05/src/main/java/ch/zhaw/ads/TreeNode.java +++ b/05/src/main/java/ch/zhaw/ads/TreeNode.java @@ -1,19 +1,19 @@ -package Praktikum_05_Code; - -class TreeNode> { - T element; - TreeNode left, right; - int height; - int count; - - TreeNode(T element){ - this.element = element; - this.count = 1; - this.height = 1; - } - TreeNode(T element, TreeNode left, TreeNode right){ - this(element); this.left = left; this.right = right; - } - - T getValue(){return element;} +package Praktikum_05_Code; + +class TreeNode> { + T element; + TreeNode left, right; + int height; + int count; + + TreeNode(T element){ + this.element = element; + this.count = 1; + this.height = 1; + } + TreeNode(T element, TreeNode left, TreeNode right){ + this(element); this.left = left; this.right = right; + } + + T getValue(){return element;} } \ No newline at end of file diff --git a/05/src/main/java/ch/zhaw/ads/TreeTraversal.java b/05/src/main/java/ch/zhaw/ads/TreeTraversal.java index a23458d..7ab40a7 100644 --- a/05/src/main/java/ch/zhaw/ads/TreeTraversal.java +++ b/05/src/main/java/ch/zhaw/ads/TreeTraversal.java @@ -1,23 +1,23 @@ -package Praktikum_05_Code; - -public class TreeTraversal> implements Traversal { - - private TreeNode root; - - public TreeTraversal(TreeNode root) { - this.root = root; - } - - public void inorder(Visitor vis) { - // to be done - } - - public void preorder(Visitor vis) { - // to be done - } - - public void postorder(Visitor vis) { - // to be done - } - -} +package Praktikum_05_Code; + +public class TreeTraversal> implements Traversal { + + private TreeNode root; + + public TreeTraversal(TreeNode root) { + this.root = root; + } + + public void inorder(Visitor vis) { + // to be done + } + + public void preorder(Visitor vis) { + // to be done + } + + public void postorder(Visitor vis) { + // to be done + } + +} diff --git a/05/src/main/java/ch/zhaw/ads/Visitor.java b/05/src/main/java/ch/zhaw/ads/Visitor.java index 7e780cc..4fbc655 100644 --- a/05/src/main/java/ch/zhaw/ads/Visitor.java +++ b/05/src/main/java/ch/zhaw/ads/Visitor.java @@ -1,7 +1,7 @@ -package Praktikum_05_Code; - -/* interface of visitor ADT */ -public interface Visitor { - /* called for each element in the tree */ - public void visit(T obj); -} +package Praktikum_05_Code; + +/* interface of visitor ADT */ +public interface Visitor { + /* called for each element in the tree */ + public void visit(T obj); +} diff --git a/05/src/test/java/ch/zhaw/ads/TreeTest.java b/05/src/test/java/ch/zhaw/ads/TreeTest.java index 3b3fbe4..1409b2c 100644 --- a/05/src/test/java/ch/zhaw/ads/TreeTest.java +++ b/05/src/test/java/ch/zhaw/ads/TreeTest.java @@ -1,63 +1,63 @@ -package Praktikum_05_Code; - -import org.junit.Test; -import org.junit.Before; -import static org.junit.Assert.*; - -public class TreeTest { - Tree tree; - - @Before - public void setUp() throws Exception { - tree = new SortedBinaryTree(); - tree.add("B"); - tree.add("A"); - tree.add("C"); - tree.add("D"); - } - - @Test - public void testInorder() { - Visitor v = new MyVisitor(); - tree.traversal().inorder(v); - assertEquals("inorder", "ABCD", v.toString()); - } - - @Test - public void testPreorder() { - Visitor v = new MyVisitor(); - tree.traversal().preorder(v); - assertEquals("preorder", "BACD", v.toString()); - } - - @Test - public void testPostorder() { - Visitor v = new MyVisitor(); - tree.traversal().postorder(v); - assertEquals("postorder", "ADCB", v.toString()); - } - - @Test - public void testLevelorder() { - Visitor v = new MyVisitor(); - tree.traversal().levelorder(v); - assertEquals("levelorder", "BACD", v.toString()); - } -} - - -class MyVisitor implements Visitor { - StringBuilder output; - - MyVisitor() { - output = new StringBuilder(); - } - - public void visit(T s) { - output.append(s); - } - - public String toString() { - return output.toString(); - } +package Praktikum_05_Code; + +import org.junit.Test; +import org.junit.Before; +import static org.junit.Assert.*; + +public class TreeTest { + Tree tree; + + @Before + public void setUp() throws Exception { + tree = new SortedBinaryTree(); + tree.add("B"); + tree.add("A"); + tree.add("C"); + tree.add("D"); + } + + @Test + public void testInorder() { + Visitor v = new MyVisitor(); + tree.traversal().inorder(v); + assertEquals("inorder", "ABCD", v.toString()); + } + + @Test + public void testPreorder() { + Visitor v = new MyVisitor(); + tree.traversal().preorder(v); + assertEquals("preorder", "BACD", v.toString()); + } + + @Test + public void testPostorder() { + Visitor v = new MyVisitor(); + tree.traversal().postorder(v); + assertEquals("postorder", "ADCB", v.toString()); + } + + @Test + public void testLevelorder() { + Visitor v = new MyVisitor(); + tree.traversal().levelorder(v); + assertEquals("levelorder", "BACD", v.toString()); + } +} + + +class MyVisitor implements Visitor { + StringBuilder output; + + MyVisitor() { + output = new StringBuilder(); + } + + public void visit(T s) { + output.append(s); + } + + public String toString() { + return output.toString(); + } } \ No newline at end of file