finished s06 ex02
This commit is contained in:
parent
603a4fabe3
commit
551bde0090
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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> {
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
package ch.zhaw.ads;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.text.*;
|
import java.text.*;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
package ch.zhaw.ads;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.text.*;
|
import java.text.*;
|
||||||
|
|
||||||
|
@ -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> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 */
|
||||||
|
@ -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 */
|
||||||
|
@ -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;}
|
||||||
}
|
}
|
||||||
|
@ -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> {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user