From 551bde00908b72d48ad928c49efcc747740fd1e6 Mon Sep 17 00:00:00 2001 From: "navid.sassan" Date: Sun, 1 Nov 2020 23:52:08 +0100 Subject: [PATCH] finished s06 ex02 --- .../main/java/ch/zhaw/ads/AVLSearchTree.java | 76 +++++++++---------- .../java/ch/zhaw/ads/AVLTreeTraversal.java | 2 + 06/src/main/java/ch/zhaw/ads/Competitor.java | 2 + .../java/ch/zhaw/ads/MyRankingVisitor.java | 2 + .../java/ch/zhaw/ads/RankingTreeServer.java | 2 + .../java/ch/zhaw/ads/SortedBinaryTree.java | 4 +- 06/src/main/java/ch/zhaw/ads/Traversal.java | 2 + 06/src/main/java/ch/zhaw/ads/Tree.java | 2 + 06/src/main/java/ch/zhaw/ads/TreeNode.java | 4 +- .../main/java/ch/zhaw/ads/TreeTraversal.java | 2 + 06/src/main/java/ch/zhaw/ads/Visitor.java | 4 +- .../java/ch/zhaw/ads/AVLSearchTreeTest.java | 4 +- 12 files changed, 64 insertions(+), 42 deletions(-) diff --git a/06/src/main/java/ch/zhaw/ads/AVLSearchTree.java b/06/src/main/java/ch/zhaw/ads/AVLSearchTree.java index 642765f..5715966 100644 --- a/06/src/main/java/ch/zhaw/ads/AVLSearchTree.java +++ b/06/src/main/java/ch/zhaw/ads/AVLSearchTree.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + public class AVLSearchTree> extends SortedBinaryTree { /** @@ -9,7 +11,7 @@ public class AVLSearchTree> extends SortedBinaryTree /** * Insert into the tree; duplicates are ignored. - * @param x the item to insert. + * @param element the item to insert. */ public void add(T element) { root = insertAt(root, element); @@ -19,15 +21,15 @@ public class AVLSearchTree> extends SortedBinaryTree if (p == null) return null; if (height(p.left) - height(p.right) == 2) { if (height(p.left.left) > height(p.left.right)) { - // to be done + p = rotateR(p); } else { - // to be done + p = rotateLR(p); } } else if (height(p.right) - height(p.left) == 2) { if (height(p.right.right) > height(p.right.left)) { - // to be done + p = rotateL(p); } else { - // to be done + p = rotateRL(p); } } p.height = Math.max(height(p.left), height(p.right)) + 1; @@ -36,70 +38,68 @@ public class AVLSearchTree> extends SortedBinaryTree /** * Internal method to insert into a subtree. - * @param x the item to insert. - * @param t the node that roots the tree. + * @param root the node that roots the tree. + * @param element the item to insert. * @return the new root. */ - private TreeNode insertAt(TreeNode p, T element) { - if (p == null) { - p = new TreeNode(element); - return p; + private TreeNode insertAt(TreeNode root, T element) { + if (root == null) { + root = new TreeNode(element); + return root; } else { - int c = element.compareTo((T) p.element); + int c = element.compareTo((T) root.element); if (c == 0) { - p.count++; + root.count++; } else if (c < 0) { - p.left = insertAt(p.left, element); + root.left = insertAt(root.left, element); } else if (c > 0) { - p.right = insertAt(p.right, element); + root.right = insertAt(root.right, element); } } - return balance(p); + return balance(root); } - // find node to replace // find node to replace // private TreeNode rep; + // replaces rep with node private TreeNode findRepAt(TreeNode node, TreeNode rep) { if (node.right != null) { - node.right = findRepAt(node.right,rep); + node.right = findRepAt(node.right, rep); } else { rep.element = node.element; rep.count = node.count; rep.height = node.height; node = node.left; } - // to be done - return p; + return node; } - // remove node - private TreeNode removeAt(TreeNode node, T x, TreeNode removed) { - if (node == null) { + // remove root + private TreeNode removeAt(TreeNode root, T x, TreeNode removed) { + if (root == null) { return null; } else { - if (x.compareTo(node.element) == 0) { + if (x.compareTo(root.element) == 0) { // found - removed.element = node.element; - if (node.count > 1) { - node.count--; - return node; - } else if (node.left == null) { - node = node.right; - } else if (node.right == null) { - node = node.left; + removed.element = root.element; + if (root.count > 1) { + root.count--; + return root; + } else if (root.left == null) { + root = root.right; + } else if (root.right == null) { + root = root.left; } else { - node.left = findRepAt(node.left,node); + root.left = findRepAt(root.left, root); } - } else if (x.compareTo(node.element) < 0) { + } else if (x.compareTo(root.element) < 0) { // search left - node.left = removeAt(node.left, x, removed); + root.left = removeAt(root.left, x, removed); } else { // search right - node.right = removeAt(node.right, x, removed); + root.right = removeAt(root.right, x, removed); } - // to be done - return p; + return balance(root); } } diff --git a/06/src/main/java/ch/zhaw/ads/AVLTreeTraversal.java b/06/src/main/java/ch/zhaw/ads/AVLTreeTraversal.java index 42d0a7b..29bc7e8 100644 --- a/06/src/main/java/ch/zhaw/ads/AVLTreeTraversal.java +++ b/06/src/main/java/ch/zhaw/ads/AVLTreeTraversal.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + import java.util.*; public class AVLTreeTraversal> implements Traversal { diff --git a/06/src/main/java/ch/zhaw/ads/Competitor.java b/06/src/main/java/ch/zhaw/ads/Competitor.java index 4a2dac3..6b70e28 100644 --- a/06/src/main/java/ch/zhaw/ads/Competitor.java +++ b/06/src/main/java/ch/zhaw/ads/Competitor.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + import java.util.*; import java.text.*; diff --git a/06/src/main/java/ch/zhaw/ads/MyRankingVisitor.java b/06/src/main/java/ch/zhaw/ads/MyRankingVisitor.java index 6991797..28f27f0 100644 --- a/06/src/main/java/ch/zhaw/ads/MyRankingVisitor.java +++ b/06/src/main/java/ch/zhaw/ads/MyRankingVisitor.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + public class MyRankingVisitor implements Visitor { private StringBuilder buf; private int rank=1; diff --git a/06/src/main/java/ch/zhaw/ads/RankingTreeServer.java b/06/src/main/java/ch/zhaw/ads/RankingTreeServer.java index cc81007..b25477d 100644 --- a/06/src/main/java/ch/zhaw/ads/RankingTreeServer.java +++ b/06/src/main/java/ch/zhaw/ads/RankingTreeServer.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + import java.util.*; import java.text.*; diff --git a/06/src/main/java/ch/zhaw/ads/SortedBinaryTree.java b/06/src/main/java/ch/zhaw/ads/SortedBinaryTree.java index 9b5834d..43c2d64 100644 --- a/06/src/main/java/ch/zhaw/ads/SortedBinaryTree.java +++ b/06/src/main/java/ch/zhaw/ads/SortedBinaryTree.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + import java.util.*; public class SortedBinaryTree> implements Tree { @@ -141,4 +143,4 @@ public class SortedBinaryTree> implements Tree { } } -} \ No newline at end of file +} diff --git a/06/src/main/java/ch/zhaw/ads/Traversal.java b/06/src/main/java/ch/zhaw/ads/Traversal.java index 8691fd1..bf897b3 100644 --- a/06/src/main/java/ch/zhaw/ads/Traversal.java +++ b/06/src/main/java/ch/zhaw/ads/Traversal.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + /* interface of Traversal ADT */ public interface Traversal> { /* traverse elements of tree in preorder */ diff --git a/06/src/main/java/ch/zhaw/ads/Tree.java b/06/src/main/java/ch/zhaw/ads/Tree.java index 7727a5f..8e3ef5f 100644 --- a/06/src/main/java/ch/zhaw/ads/Tree.java +++ b/06/src/main/java/ch/zhaw/ads/Tree.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + /* interface of Tree ADT */ public interface Tree> { /* add an element to the tree */ diff --git a/06/src/main/java/ch/zhaw/ads/TreeNode.java b/06/src/main/java/ch/zhaw/ads/TreeNode.java index 6638ed9..ae58e04 100644 --- a/06/src/main/java/ch/zhaw/ads/TreeNode.java +++ b/06/src/main/java/ch/zhaw/ads/TreeNode.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + class TreeNode> { T element; TreeNode left, right; @@ -15,4 +17,4 @@ class TreeNode> { } T getValue(){return element;} -} \ No newline at end of file +} diff --git a/06/src/main/java/ch/zhaw/ads/TreeTraversal.java b/06/src/main/java/ch/zhaw/ads/TreeTraversal.java index 507d2fc..248defa 100644 --- a/06/src/main/java/ch/zhaw/ads/TreeTraversal.java +++ b/06/src/main/java/ch/zhaw/ads/TreeTraversal.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + import java.util.*; public class TreeTraversal> implements Traversal { diff --git a/06/src/main/java/ch/zhaw/ads/Visitor.java b/06/src/main/java/ch/zhaw/ads/Visitor.java index 2510b3e..0c9436b 100644 --- a/06/src/main/java/ch/zhaw/ads/Visitor.java +++ b/06/src/main/java/ch/zhaw/ads/Visitor.java @@ -1,5 +1,7 @@ +package ch.zhaw.ads; + /* interface of visitor ADT */ -public interface Visitor> { +public interface Visitor { /* called for each element in the tree */ public void visit(T obj); } diff --git a/06/src/test/java/ch/zhaw/ads/AVLSearchTreeTest.java b/06/src/test/java/ch/zhaw/ads/AVLSearchTreeTest.java index 773134f..a20a5f6 100644 --- a/06/src/test/java/ch/zhaw/ads/AVLSearchTreeTest.java +++ b/06/src/test/java/ch/zhaw/ads/AVLSearchTreeTest.java @@ -1,3 +1,5 @@ +package ch.zhaw.ads; + import java.util.*; import org.junit.Test; import org.junit.Before; @@ -127,4 +129,4 @@ class MyVisitor implements Visitor { public String toString() { return output.toString(); } -} \ No newline at end of file +}