Question: I need help figuring out how to implement my findPathEncodingOf() method. Thanks a ton! Will thumbs up! JAVA CLASS FILES (3) StudentBinaryTree.java (1) package exam3;
I need help figuring out how to implement my findPathEncodingOf() method. Thanks a ton! Will thumbs up!
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){ // Complete return ""; // dummy statement; delete when you are done } // 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().trim(); } 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) { // Complete return ""; // dummy statement; delete when you are done } // checks if the tree is also a BST public boolean isBSTBasedOnnNumber() { // Complete return false; // dummy statement; delete when you are done } // 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 return 0; // dummy statement; delete when you are done } // 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, "0"); B.insert(456, "Bob Schmidt", 2.4, "1"); B.insert(457, "Leon Turner", 2.7, "01"); B.insert(789, "Cameron Ruble", 2.5, "11"); B.insert(910, "Dalton Wilken", 2.6, "111"); // 1 - insert() System.out.println("Inorder traversal: "); for(UnfStudent student : B) System.out.println(student); // 2 - findPathEncodingOf() System.out.println(" Find Path of Encoding: "); System.out.println(B.findPathEncodingOf(123)); // 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()); // 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 + "> "; } }