Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I\'m trying to create a removemax method for my binary search tree. /** * * @aut

ID: 3575000 • Letter: I

Question

I'm trying to create a removemax method for my binary search tree.

/**
*
* @author Derrick Mingee
* @version 2.5
*
*/
public class Bst implements BstADT {


private Node root;


public Bst() {

}

public Bst(Node a) {
root = a;
}

public boolean contains(Character val) {
return containsHelper(root, val);
}

private boolean containsHelper(Node a, Character target) {
if (a == null) {
return false;
}
else if (a.data.compareTo(target) == 0) {
return true;
}
else if (a.data.compareTo(target) > 0) {
return containsHelper(a.left, target);
}
else {
return containsHelper(a.right, target);
}
}
  
public String preorder(){
return "< "+preorderHelper(root);
}
  
private String preorderHelper(Node a){
if(a!=null){
return a.data+" ";
}
preorderHelper(a.left);
preorderHelper(a.right);
return ">";
}

public void insert(Character a) {
root = insertHelper(root, a);
}

private Node insertHelper(Node a, Character inserted) {
if (a == null) {
return new Node(inserted);
}
if (a.data.compareTo(inserted) > 0) {
a.left = insertHelper(a.left, inserted);
}
else {
a.right = insertHelper(a.right, inserted);
}
return a;
}

public boolean isEmpty() {
return (root == null);
}

public void removeMax() {
}

private void removeMaxHelper(Node a) {
if (a == null) {
throw new RuntimeException("Error");
}
else if (a.right != null) {
removeMaxHelper(a.right);
  
}
else if (a.right == null) {
a.data=null;
}

}

public String pathTo(Character a){
return pathToHelper(root, a);
}

private String pathToHelper(Node a, Character val) {
if (a == null) {
return "";
}else{
if(a.data.compareTo(val)<0){
return "R"+pathToHelper(a.right, val);
}
else if(a.data.compareTo(val)>0){
return "L"+pathToHelper(a.left, val);
}
else{
return "";
}
}
}

class Node {
Character data;

Node left;

Node right;

public Node(Character data) {
this.data = data;
left = null;
right = null;
}
}

}

Explanation / Answer

public void removemax (String key, BSTNode pos) { if (pos == null) return; if (key.compareTo(pos.key)0) remove (key, pos.rightChild); else { if (pos.leftChild != null && pos.rightChild != null) { /* pos has two children */ BSTNode maxFromLeft = findMax (pos.leftChild); //need to make a findMax helper //"Replacing " pos.key " with " maxFromLeft.key pos.key = maxFromLeft.key; remove (maxFromLeft.key, pos.leftChild); } else if(pos.leftChild != null) { /* node pointed by pos has at most one child */ BSTNode trash = pos; //"Promoting " pos.leftChild.key " to replace " pos.key pos = pos.leftChild; trash = null; } else if(pos.rightChild != null) { /* node pointed by pos has at most one child */ BSTNode trash = pos; /* "Promoting " pos.rightChild.key" to replace " pos.key */ pos = pos.rightChild; trash = null; } else { pos = null; } } }