assignment 4

This commit is contained in:
Joey Eamigh
2023-10-31 20:18:48 -04:00
parent d9a7eeb79e
commit f178e9fde0
6 changed files with 249 additions and 1 deletions

7
.vscode/launch.json vendored
View File

@@ -4,6 +4,13 @@
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{
"type": "java",
"name": "Main",
"request": "launch",
"mainClass": "assn04.Main",
"projectName": "COMP210_238a5b6"
},
{ {
"type": "java", "type": "java",
"name": "Main", "name": "Main",

View File

@@ -1,7 +1,7 @@
default: run default: run
recentFile := `find src -type f -printf '%T@ %p\n' | sort -n | cut -d " " -f 2- | tail -1` recentFile := `find src -type f -printf '%T@ %p\n' | sort -n | cut -d " " -f 2- | tail -1`
recentFolder := `find src -type d -printf '%T@ %p\n' | sort -n | cut -d' ' -f 2- | sed 's/src\///' | tail -2 | head -1` recentFolder := `find src -type d -printf '%T@ %p\n' | sort -n | cut -d' ' -f 2- | sed 's/src\///' | tail -2 | grep -v "src"`
echo: echo:
echo {{recentFile}} echo {{recentFile}}

51
src/assn04/BST.java Normal file
View File

@@ -0,0 +1,51 @@
package assn04;
public interface BST<T extends Comparable<T>> {
/**
* Inserts element into the tree in the appropriate position.
* Either returns the mutated tree after insertion or a new tree
* with the inserted element.
*
* @param element to be added to the tree
* @return BST<T> after insertion
**/
BST<T> insert(T element);
/**
* Removes the element from the tree if it is present.
* Either returns the possibly mutated tree after removal or an empty tree.
*
* @param element to be removed from tree
* @return BST<T> after removal
*/
BST<T> remove(T element);
/**
* Prints the tree in depth-first pre-order traversal.
* Print the elements all in one line with a space after each element.
*/
void printPreOrderTraversal();
/**
* Prints the tree in post-order traversal.
* Print the elements all in one line with a space after each element.
*/
void printPostOrderTraversal();
// @return int which is based on the number of edges. -1 for an EmptyBST.
int getHeight();
/**
* Following are some methods which are self-explanatory.
*/
T findMin();
BST<T> getLeft();
BST<T> getRight();
T getElement();
boolean isEmpty();
}

55
src/assn04/EmptyBST.java Normal file
View File

@@ -0,0 +1,55 @@
package assn04;
public class EmptyBST<T extends Comparable<T>> implements BST<T> {
@Override
public BST<T> insert(T element) {
return new NonEmptyBST<T>(element);
}
@Override
public BST<T> remove(T element) {
return this;
}
@Override
public int getHeight() {
return -1;
}
@Override
public void printPreOrderTraversal() {
return;
}
@Override
public T findMin() {
throw new UnsupportedOperationException();
}
@Override
public void printPostOrderTraversal() {
return;
}
@Override
public BST<T> getLeft() {
throw new UnsupportedOperationException();
}
@Override
public BST<T> getRight() {
throw new UnsupportedOperationException();
}
@Override
public T getElement() {
throw new UnsupportedOperationException();
}
@Override
public boolean isEmpty() {
return true;
}
}

45
src/assn04/Main.java Normal file
View File

@@ -0,0 +1,45 @@
package assn04;
public class Main {
public static void main(String[] args) {
System.out.println("Original tree:");
printAll(makeInstructorTree());
System.out.println("Inserting 32:");
BST<Integer> insertBst = makeInstructorTree();
insertBst.insert(32);
printAll(insertBst);
System.out.println("Removing 31:");
BST<Integer> removeBst = makeInstructorTree();
removeBst.remove(31);
printAll(removeBst);
}
public static <T extends Comparable<T>> void printAll(BST<T> bst) {
System.out.println("Pre-order traversal:");
bst.printPreOrderTraversal();
System.out.println("\nPost-order traversal:");
bst.printPostOrderTraversal();
System.out.println('\n');
}
public static BST<Integer> makeInstructorTree() {
BST<Integer> bst = new NonEmptyBST<Integer>(78);
bst = bst.insert(84);
bst = bst.insert(31);
bst = bst.insert(13);
bst = bst.insert(38);
bst = bst.insert(10);
bst = bst.insert(12);
bst = bst.insert(40);
bst = bst.insert(39);
bst = bst.insert(47);
return bst;
}
}

View File

@@ -0,0 +1,90 @@
package assn04;
public class NonEmptyBST<T extends Comparable<T>> implements BST<T> {
private T _element;
private BST<T> _left;
private BST<T> _right;
public NonEmptyBST(T element) {
_left = new EmptyBST<T>();
_right = new EmptyBST<T>();
_element = element;
}
@Override
public BST<T> insert(T element) {
if (element.compareTo(_element) < 0)
_left = _left.insert(element);
else if (element.compareTo(_element) > 0 || element.compareTo(_element) == 0)
_right = _right.insert(element);
return this;
}
@Override
public T findMin() {
if (_left.isEmpty())
return _element;
else
return _left.findMin();
}
@Override
public BST<T> remove(T element) {
if (element.compareTo(_element) < 0)
_left = _left.remove(element);
else if (element.compareTo(_element) > 0)
_right = _right.remove(element);
else {
if (_left.isEmpty())
return _right;
else if (_right.isEmpty())
return _left;
else {
_element = _right.findMin();
_right = _right.remove(_element);
}
}
return this;
}
@Override
public void printPreOrderTraversal() {
System.out.print(_element + " ");
_left.printPreOrderTraversal();
_right.printPreOrderTraversal();
}
@Override
public void printPostOrderTraversal() {
_left.printPostOrderTraversal();
_right.printPostOrderTraversal();
System.out.print(_element + " ");
}
@Override
public int getHeight() {
return Math.max(_left.getHeight(), _right.getHeight()) + 1;
}
@Override
public BST<T> getLeft() {
return _left;
}
@Override
public BST<T> getRight() {
return _right;
}
@Override
public T getElement() {
return _element;
}
@Override
public boolean isEmpty() {
return false;
}
}