From 690d96b8c46d050ef1f3476cc16a50dac91f5451 Mon Sep 17 00:00:00 2001 From: "navid.sassan" Date: Sun, 25 Oct 2020 19:03:34 +0100 Subject: [PATCH] added 05 exercise --- 05/Aufgabenstellung Praktikum 05.pdf | Bin 0 -> 20791 bytes .../java/ch/zhaw/ads/SortedBinaryTree.java | 130 ++++++++++++++++++ 05/src/main/java/ch/zhaw/ads/Traversal.java | 13 ++ 05/src/main/java/ch/zhaw/ads/Tree.java | 19 +++ 05/src/main/java/ch/zhaw/ads/TreeNode.java | 19 +++ .../main/java/ch/zhaw/ads/TreeTraversal.java | 23 ++++ 05/src/main/java/ch/zhaw/ads/Visitor.java | 7 + 05/src/test/java/ch/zhaw/ads/TreeTest.java | 63 +++++++++ 8 files changed, 274 insertions(+) create mode 100644 05/Aufgabenstellung Praktikum 05.pdf create mode 100644 05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java create mode 100644 05/src/main/java/ch/zhaw/ads/Traversal.java create mode 100644 05/src/main/java/ch/zhaw/ads/Tree.java create mode 100644 05/src/main/java/ch/zhaw/ads/TreeNode.java create mode 100644 05/src/main/java/ch/zhaw/ads/TreeTraversal.java create mode 100644 05/src/main/java/ch/zhaw/ads/Visitor.java create mode 100644 05/src/test/java/ch/zhaw/ads/TreeTest.java diff --git a/05/Aufgabenstellung Praktikum 05.pdf b/05/Aufgabenstellung Praktikum 05.pdf new file mode 100644 index 0000000000000000000000000000000000000000..083ecf4eb3e44243e9a2260f90369869d98c78ef GIT binary patch literal 20791 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 KNxZmq?f(EJJLq=+ literal 0 HcmV?d00001 diff --git a/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java b/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java new file mode 100644 index 0000000..194a1c6 --- /dev/null +++ b/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java @@ -0,0 +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 ? " | " : " ")); + } + } + +} diff --git a/05/src/main/java/ch/zhaw/ads/Traversal.java b/05/src/main/java/ch/zhaw/ads/Traversal.java new file mode 100644 index 0000000..37e3cfd --- /dev/null +++ b/05/src/main/java/ch/zhaw/ads/Traversal.java @@ -0,0 +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); +} diff --git a/05/src/main/java/ch/zhaw/ads/Tree.java b/05/src/main/java/ch/zhaw/ads/Tree.java new file mode 100644 index 0000000..7a43e57 --- /dev/null +++ b/05/src/main/java/ch/zhaw/ads/Tree.java @@ -0,0 +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(); +} diff --git a/05/src/main/java/ch/zhaw/ads/TreeNode.java b/05/src/main/java/ch/zhaw/ads/TreeNode.java new file mode 100644 index 0000000..a83522a --- /dev/null +++ b/05/src/main/java/ch/zhaw/ads/TreeNode.java @@ -0,0 +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;} +} \ 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 new file mode 100644 index 0000000..a23458d --- /dev/null +++ b/05/src/main/java/ch/zhaw/ads/TreeTraversal.java @@ -0,0 +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 + } + +} diff --git a/05/src/main/java/ch/zhaw/ads/Visitor.java b/05/src/main/java/ch/zhaw/ads/Visitor.java new file mode 100644 index 0000000..7e780cc --- /dev/null +++ b/05/src/main/java/ch/zhaw/ads/Visitor.java @@ -0,0 +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); +} diff --git a/05/src/test/java/ch/zhaw/ads/TreeTest.java b/05/src/test/java/ch/zhaw/ads/TreeTest.java new file mode 100644 index 0000000..3b3fbe4 --- /dev/null +++ b/05/src/test/java/ch/zhaw/ads/TreeTest.java @@ -0,0 +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(); + } +} \ No newline at end of file