Question: How can I implement my isHeapBasedOnnNumber() method and fix my numberOfStudentsWhoseGPAisGreaterThan() method? Both methods are commented on for their purpose. Will thumbs up, thank you!
How can I implement my isHeapBasedOnnNumber() method and fix my numberOfStudentsWhoseGPAisGreaterThan() method? Both methods are commented on for their purpose. Will thumbs up, thank you!
JAVA CLASS FILES (3)
StudentBinaryTree.java (1)
package exam3; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Stack; public class StudentBinaryTree implements Iterable{ public static class Node { private UnfStudent studentInfo; private Node left, right, parent; public Node(int nNumber, String name, double gpa, Node parent) { studentInfo = new UnfStudent(nNumber, name, gpa); this.parent = parent; } public String toString() { return studentInfo.toString(); } } private Node root = null; // inserts a new node using the path made up of 0s and 1s like we did in the class public void insert(int nNumber, String name, double gpa, String path) { // Complete; no two nodes can have the same UnfStudent if (root == null) { root = new Node(nNumber, name, gpa, null); return; } Node currentNode = root; int pathLength = path.length(); for (int i = 0; i < pathLength - 1; i++) { char direction = path.charAt(i); if (direction == '0') { if (currentNode.left == null) { currentNode.left = new Node(nNumber, name, gpa, currentNode); return; } else currentNode = currentNode.left; } else if (direction == '1') { if (currentNode.right == null) { currentNode.right = new Node(nNumber, name, gpa, currentNode); return; } else currentNode = currentNode.right; } } char lastDirection = path.charAt(pathLength - 1); if (lastDirection == '0') currentNode.left = new Node(nNumber, name, gpa, currentNode); else if (lastDirection == '1') currentNode.right = new Node(nNumber, name, gpa, currentNode); } // returns the binary path for the node that contains 'nNumber'; return null if such a node is not present public String findPathEncodingOf(int nNumber) { Node node = findNodeBynNumber(root, nNumber); if (node == null) { return null; } StringBuilder path = new StringBuilder(); while (node.parent != null) { path.insert(0, node == node.parent.left ? "0" : "1"); node = node.parent; } return path.toString(); } // returns the inorder traversal sequence, computed iteratively public String inOrderNonRecursive() { // hint: use a stack; feel free to use java.util.Stack // Complete StringBuilder result = new StringBuilder(); Stack stack = new Stack<>(); Node current = root; while (current != null || !stack.isEmpty()) { while (current != null) { stack.push(current); current = current.left; } current = stack.pop(); result.append(current.studentInfo).append(" "); current = current.right; } return result.toString().trim(); } // returns the inorder traversal sequence, computed recursively public String inOrderRecursive() { StringBuilder result = new StringBuilder(); inOrderRecursiveHelper(root, result); return result.toString(); } private void inOrderRecursiveHelper(Node node, StringBuilder result) { if (node == null) { return; } inOrderRecursiveHelper(node.left, result); result.append(node.studentInfo).append(" "); inOrderRecursiveHelper(node.right, result); } // returns the binary path from the node that contains 'nNumber' to the root // return null if such a node is not present; hint: use the parent field public String constructPathFromNodeToRoot(int nNumber) { Node node = findNodeBynNumber(root, nNumber); if (node == null) { return null; } StringBuilder path = new StringBuilder(); while (node.parent != null) { path.append(node == node.parent.left ? '0' : '1'); node = node.parent; } return path.reverse().toString(); } // checks if the tree is also a BST public boolean isBSTBasedOnnNumber() { return isBSTUtil(root, Integer.MIN_VALUE, Integer.MAX_VALUE); } private boolean isBSTUtil(Node node, int min, int max) { if (node == null) { return true; } if (node.studentInfo.getnNumber() <= min || node.studentInfo.getnNumber() >= max) { return false; } return isBSTUtil(node.left, min, node.studentInfo.getnNumber()) && isBSTUtil(node.right, node.studentInfo.getnNumber(), max); } // checks if the tree is also a min-heap public boolean isHeapBasedOnnNumber() { // Complete return false; // dummy statement; delete when you are done } // counts the number of students whose gpa is > 'g' public int numberOfStudentsWhoseGPAisGreaterThan(double g) { // Complete Node current = root; int count = 0; while(current != null) { if (current.studentInfo.getGPA() > g) count++; } return count; } // returns the name of the student whose nNumber is known public String findTheNameOf(int nNumber) { Node node = findNodeBynNumber(root, nNumber); return node == null ? null : node.studentInfo.getName(); } private Node findNodeBynNumber(Node node, int nNumber) { if (node == null) { return null; } if (node.studentInfo.getnNumber() == nNumber) { return node; } Node leftResult = findNodeBynNumber(node.left, nNumber); Node rightResult = findNodeBynNumber(node.right, nNumber); return leftResult != null ? leftResult : rightResult; } // returns the number of nodes having 2 children public int countNumberofNodesHaving2children() { // Complete return 0; // dummy statement; delete when you are done } // returns the number of leaves public int countNumberofLeaves() { // Complete return 0; // dummy statement; delete when you are done } // checks if this current tree is same as the given tree 'B' // 2 binary trees are same if their inorder travsersal sequence + preorder/postorder sequences are same public boolean isSame(StudentBinaryTree B){ // Complete return false; // dummy statement; delete when you are done } // returns the nNumber stored in the inorder successor; null it does not exist public int inOrderSuccessorOf(int nNumber){ // Complete return 0; // dummy statement; delete when you are done } // Complete the iterator for this class public Iterator iterator() { return new TreeIterator(); } public class TreeIterator implements Iterator { private Stack stack; public TreeIterator() { stack = new Stack<>(); pushLeftNodes(root); } private void pushLeftNodes(Node node) { while (node != null) { stack.push(node); node = node.left; } } public boolean hasNext() { return !stack.isEmpty(); } public UnfStudent next() { if (!hasNext()) { throw new NoSuchElementException(); } Node node = stack.pop(); pushLeftNodes(node.right); return node.studentInfo; } } }
TestStudentBinaryTree.java (2)
package exam3; public class TestStudentBinaryTree { public static void main(String[] args){ StudentBinaryTree B = new StudentBinaryTree(); B.insert(123, "Alice Wonder", 2.3, "root"); B.insert(456, "Bob Schmidt", 2.4, "1"); B.insert(457, "Leon Turner", 2.7, "0"); B.insert(789, "Cameron Ruble", 2.5, "01"); B.insert(910, "Dalton Wilken", 2.6, "11"); // 1 - insert() System.out.println("Inorder traversal: "); for(UnfStudent student : B) System.out.println(student); // 2 - findPathEncodingOf() System.out.println(" Path Encoding: "); System.out.println(B.findPathEncodingOf(910)); // 3 - inOrderNonRecursive() System.out.println(" Inorder Non-Recursive: "); System.out.println(B.inOrderNonRecursive()); // 4 - inOrderRecursive() System.out.println(" Inorder Recursive: "); System.out.println(B.inOrderRecursive()); // 5 - constructPathFromNodeToRoot() System.out.println(" Node to Root Path: "); System.out.println(B.constructPathFromNodeToRoot(910)); // 6 - isBSTBasedOnnNumber() System.out.println(" Is BST Based on nNumber: "); System.out.println(B.isBSTBasedOnnNumber()); // 7 - isHeapBasedOnnNumber() System.out.println(" Is Heap Based on nNumber: "); System.out.println(B.isHeapBasedOnnNumber()); // 8 - numberOfStudentsWhoseGPAisGreaterThan() System.out.println(" Number of Students w/> GPA: "); System.out.println(B.numberOfStudentsWhoseGPAisGreaterThan(2.3)); // 9 - findTheNameOf() System.out.println(" Find Name of nNumber: "); System.out.println(B.findTheNameOf(123)); } }
UnfStudent.java (3)
package exam3; // do not delete public class UnfStudent { private int nNumber; private String name; private double gpa; public UnfStudent(int nNumber, String name, double gpa){ this.nNumber = nNumber; this.name = name; this.gpa = gpa; } public int getnNumber() { return nNumber; } public void setnNumber(int n) { nNumber = n; } public String getName() { return name; } public void setName(String s) { name = s; } public double getGPA() { return gpa; } public void setGpa(double g) { gpa = g; } public String toString() { return "<" + nNumber + ", " + name + "> "; } }