Question
I need I help with the ones that say Left as exercise: public class BST implements Tree { protected TreeNode root; protected int size =
I need I help with the ones that say Left as exercise:
public class BST
/** Create a default BST with a natural order comparator */ public BST() { this.c = (e1, e2) -> ((Comparable
/** Create a BST with a specified comparator */ public BST(java.util.Comparator
/** Create a binary tree from an array of objects */ public BST(E[] objects) { this.c = (e1, e2) -> ((Comparable
@Override /** Returns true if the element is in the tree */ public boolean search(E e) { TreeNode
while (current != null) { if (c.compare(e, current.element) < 0) { current = current.left; } else if (c.compare(e, current.element) > 0) { current = current.right; } else // element matches current.element return true; // Element is found }
return false; }
@Override /** Insert element e into the binary tree * Return true if the element is inserted successfully */ public boolean insert(E e) { if (root == null) root = createNewNode(e); // Create a new root else { // Locate the parent node TreeNode
// Create the new node and attach it to the parent node if (c.compare(e, parent.element) < 0) parent.left = createNewNode(e); else parent.right = createNewNode(e); }
size++; return true; // Element inserted successfully }
protected TreeNode
@Override /** Inorder traversal from the root */ public void inorder() { inorder(root); }
/** Inorder traversal from a subtree */ protected void inorder(TreeNode
@Override /** Postorder traversal from the root */ public void postorder() { postorder(root); }
/** Postorder traversal from a subtree */ protected void postorder(TreeNode
@Override /** Preorder traversal from the root */ public void preorder() { preorder(root); }
/** Preorder traversal from a subtree */ protected void preorder(TreeNode
/** This inner class is static, because it does not access any instance members defined in its outer class */ public static class TreeNode
public TreeNode(E e) { element = e; } }
@Override /** Get the number of nodes in the tree */ public int getSize() { return size; }
/** Returns the root of the tree */ public TreeNode
/** Returns a path from the root leading to the specified element */ public java.util.ArrayList
while (current != null) { list.add(current); // Add the node to the list if (c.compare(e, current.element) < 0) { current = current.left; } else if (c.compare(e, current.element) > 0) { current = current.right; } else break; }
return list; // Return an array list of nodes }
@Override /** Delete an element from the binary tree. * Return true if the element is deleted successfully * Return false if the element is not in the tree */ public boolean delete(E e) { // Locate the node to be deleted and also locate its parent node TreeNode
if (current == null) return false; // Element is not in the tree
// Case 1: current has no left child if (current.left == null) { // Connect the parent with the right child of the current node if (parent == null) { root = current.right; } else { if (c.compare(e, parent.element) < 0) parent.left = current.right; else parent.right = current.right; } } else { // Case 2: The current node has a left child // Locate the rightmost node in the left subtree of // the current node and also its parent TreeNode
while (rightMost.right != null) { parentOfRightMost = rightMost; rightMost = rightMost.right; // Keep going to the right }
// Replace the element in current by the element in rightMost current.element = rightMost.element;
// Eliminate rightmost node if (parentOfRightMost.right == rightMost) parentOfRightMost.right = rightMost.left; else // Special case: parentOfRightMost == current parentOfRightMost.left = rightMost.left; }
size--; return true; // Element deleted successfully }
@Override /** Obtain an iterator. Use inorder. */ public java.util.Iterator
// Inner class InorderIterator private class InorderIterator implements java.util.Iterator
public InorderIterator() { inorder(); // Traverse binary tree and store elements in list }
/** Inorder traversal from the root*/ private void inorder() { inorder(root); }
/** Inorder traversal from a subtree */ private void inorder(TreeNode
@Override /** More elements for traversing? */ public boolean hasNext() { if (current < list.size()) return true;
return false; }
@Override /** Get the current element and move to the next */ public E next() { return list.get(current++); }
@Override // Remove the element returned by the last next() public void remove() { if (current == 0) // next() has not been called yet throw new IllegalStateException();
delete(list.get(--current)); list.clear(); // Clear the list inorder(); // Rebuild the list } }
@Override /** Remove all elements from the tree */ public void clear() { root = null; size = 0; } }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started