finished s06 ex02

This commit is contained in:
navid.sassan 2020-11-01 23:52:08 +01:00
parent 603a4fabe3
commit 551bde0090
12 changed files with 64 additions and 42 deletions

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
public class AVLSearchTree<T extends Comparable<T>> extends SortedBinaryTree<T> { public class AVLSearchTree<T extends Comparable<T>> extends SortedBinaryTree<T> {
/** /**
@ -9,7 +11,7 @@ public class AVLSearchTree<T extends Comparable<T>> extends SortedBinaryTree<T>
/** /**
* Insert into the tree; duplicates are ignored. * Insert into the tree; duplicates are ignored.
* @param x the item to insert. * @param element the item to insert.
*/ */
public void add(T element) { public void add(T element) {
root = insertAt(root, element); root = insertAt(root, element);
@ -19,15 +21,15 @@ public class AVLSearchTree<T extends Comparable<T>> extends SortedBinaryTree<T>
if (p == null) return null; if (p == null) return null;
if (height(p.left) - height(p.right) == 2) { if (height(p.left) - height(p.right) == 2) {
if (height(p.left.left) > height(p.left.right)) { if (height(p.left.left) > height(p.left.right)) {
// to be done p = rotateR(p);
} else { } else {
// to be done p = rotateLR(p);
} }
} else if (height(p.right) - height(p.left) == 2) { } else if (height(p.right) - height(p.left) == 2) {
if (height(p.right.right) > height(p.right.left)) { if (height(p.right.right) > height(p.right.left)) {
// to be done p = rotateL(p);
} else { } else {
// to be done p = rotateRL(p);
} }
} }
p.height = Math.max(height(p.left), height(p.right)) + 1; p.height = Math.max(height(p.left), height(p.right)) + 1;
@ -36,70 +38,68 @@ public class AVLSearchTree<T extends Comparable<T>> extends SortedBinaryTree<T>
/** /**
* Internal method to insert into a subtree. * Internal method to insert into a subtree.
* @param x the item to insert. * @param root the node that roots the tree.
* @param t the node that roots the tree. * @param element the item to insert.
* @return the new root. * @return the new root.
*/ */
private TreeNode insertAt(TreeNode p, T element) { private TreeNode insertAt(TreeNode root, T element) {
if (p == null) { if (root == null) {
p = new TreeNode<T>(element); root = new TreeNode<T>(element);
return p; return root;
} else { } else {
int c = element.compareTo((T) p.element); int c = element.compareTo((T) root.element);
if (c == 0) { if (c == 0) {
p.count++; root.count++;
} else if (c < 0) { } else if (c < 0) {
p.left = insertAt(p.left, element); root.left = insertAt(root.left, element);
} else if (c > 0) { } 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 // find node to replace
// private TreeNode<T> rep; // private TreeNode<T> rep;
// replaces rep with node
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;
rep.count = node.count; rep.count = node.count;
rep.height = node.height; rep.height = node.height;
node = node.left; node = node.left;
} }
// to be done return node;
return p;
} }
// remove node // remove root
private TreeNode<T> removeAt(TreeNode<T> node, T x, TreeNode<T> removed) { private TreeNode<T> removeAt(TreeNode<T> root, T x, TreeNode<T> removed) {
if (node == null) { if (root == null) {
return null; return null;
} else { } else {
if (x.compareTo(node.element) == 0) { if (x.compareTo(root.element) == 0) {
// found // found
removed.element = node.element; removed.element = root.element;
if (node.count > 1) { if (root.count > 1) {
node.count--; root.count--;
return node; return root;
} else if (node.left == null) { } else if (root.left == null) {
node = node.right; root = root.right;
} else if (node.right == null) { } else if (root.right == null) {
node = node.left; root = root.left;
} else { } 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 // search left
node.left = removeAt(node.left, x, removed); root.left = removeAt(root.left, x, removed);
} else { } else {
// search right // search right
node.right = removeAt(node.right, x, removed); root.right = removeAt(root.right, x, removed);
} }
// to be done return balance(root);
return p;
} }
} }

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*; import java.util.*;
public class AVLTreeTraversal<T extends Comparable<T>> implements Traversal<T> { public class AVLTreeTraversal<T extends Comparable<T>> implements Traversal<T> {

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*; import java.util.*;
import java.text.*; import java.text.*;

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
public class MyRankingVisitor implements Visitor<Competitor> { public class MyRankingVisitor implements Visitor<Competitor> {
private StringBuilder buf; private StringBuilder buf;
private int rank=1; private int rank=1;

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*; import java.util.*;
import java.text.*; import java.text.*;

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
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> {
@ -141,4 +143,4 @@ public class SortedBinaryTree<T extends Comparable<T>> implements Tree<T> {
} }
} }
} }

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
/* interface of Traversal ADT */ /* interface of Traversal ADT */
public interface Traversal<T extends Comparable<T>> { public interface Traversal<T extends Comparable<T>> {
/* traverse elements of tree in preorder */ /* traverse elements of tree in preorder */

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
/* interface of Tree ADT */ /* interface of Tree ADT */
public interface Tree<T extends Comparable<T>> { public interface Tree<T extends Comparable<T>> {
/* add an element to the tree */ /* add an element to the tree */

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
class TreeNode<T extends Comparable<T>> { class TreeNode<T extends Comparable<T>> {
T element; T element;
TreeNode left, right; TreeNode left, right;
@ -15,4 +17,4 @@ class TreeNode<T extends Comparable<T>> {
} }
T getValue(){return element;} T getValue(){return element;}
} }

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*; import java.util.*;
public class TreeTraversal<T extends Comparable<T>> implements Traversal<T> { public class TreeTraversal<T extends Comparable<T>> implements Traversal<T> {

View File

@ -1,5 +1,7 @@
package ch.zhaw.ads;
/* interface of visitor ADT */ /* interface of visitor ADT */
public interface Visitor<T extends Comparable<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);
} }

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*; import java.util.*;
import org.junit.Test; import org.junit.Test;
import org.junit.Before; import org.junit.Before;
@ -127,4 +129,4 @@ class MyVisitor<T> implements Visitor<T> {
public String toString() { public String toString() {
return output.toString(); return output.toString();
} }
} }