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> {
/**
@ -9,7 +11,7 @@ public class AVLSearchTree<T extends Comparable<T>> extends SortedBinaryTree<T>
/**
* 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<T extends Comparable<T>> extends SortedBinaryTree<T>
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<T extends Comparable<T>> extends SortedBinaryTree<T>
/**
* 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<T>(element);
return p;
private TreeNode insertAt(TreeNode root, T element) {
if (root == null) {
root = new TreeNode<T>(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<T> rep;
// replaces rep with node
private TreeNode<T> findRepAt(TreeNode<T> node, TreeNode<T> 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<T> removeAt(TreeNode<T> node, T x, TreeNode<T> removed) {
if (node == null) {
// remove root
private TreeNode<T> removeAt(TreeNode<T> root, T x, TreeNode<T> 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);
}
}

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*;
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.text.*;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
class TreeNode<T extends Comparable<T>> {
T element;
TreeNode left, right;

View File

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

View File

@ -1,5 +1,7 @@
package ch.zhaw.ads;
/* interface of visitor ADT */
public interface Visitor<T extends Comparable<T>> {
public interface Visitor<T> {
/* called for each element in the tree */
public void visit(T obj);
}

View File

@ -1,3 +1,5 @@
package ch.zhaw.ads;
import java.util.*;
import org.junit.Test;
import org.junit.Before;