Lab 7 Feedback Marking scheme: -------------------- 1.2 / 2 -some unit tests failed; TAs, please check for errors -------------------- TA Comments: -in inorder, preorder, and postorder, you need the results of the recursive traversals: private static List<String> inorder(INode<String> root) { List<String> result = new ArrayList<>(); if (root == null) { return result; } List<String> goLeft = TreeTraversal.inorder(root.left()); // you need this result List<String> goRight = TreeTraversal.inorder(root.right()); // you need this result result.addAll(goLeft); result.add(root.data()); result.addAll(goRight); return result; } the preorder and postorder traversals are similar, except that you recursively perform preorder and postorder traversals -in breadthFirst, you should follow the instructions in the lab document: public static List<String> breadthFirst(BinarySearchTree<String> tree) { List<String> result = new ArrayList<>(); INode<String> root = tree.root(); // 1. If the node is null then return. if (root == null) { return result; } // 2. Create an empty queue q of nodes. Queue<INode<String>> q = new LinkedList<>(); // 3. Add the root node q.add(root); // 4. While q is not empty while (!q.isEmpty()) { // i) Dequeue the node n from the front of q INode<String> n = q.remove(); // ii) Visit n result.add(n.data()); // iii) If n has a left child then enqueue the left child in q if (n.left() != null) { q.add(n.left()); } // iv) If n has a right child then enqueue the right child in q if (n.right() != null) { q.add(n.right()); } } return result; } -------------------- Style checker output: No style errors found by checkstyle; TAs, please check for poorly named variables, unusual programming constructs, and other style errors. -------------------- Unit tester output: YOUR SUMBISSION FAILED SOME UNIT TESTS Here is the test output: java -classpath .:/home/burton/work/teaching/2017F/2030/marking/lab7/_jar/* org.junit.runner.JUnitCore eecs2030.lab7.Lab7Suite JUnit version 4.12 ..........E.....E..E.E.E.E Time: 0.023 There were 6 failures: 1) test02e_preorder(eecs2030.lab7.TreeTraversalTest) java.lang.AssertionError: failed for tree in lab document expected:<[50, 27, 08, 44, 73, 83, 73, 93]> but was:<[50, 08, 27, 44, 73, 73, 83, 93]> 2) test03e_postorder(eecs2030.lab7.TreeTraversalTest) java.lang.AssertionError: failed for tree in lab document expected:<[08, 44, 27, 73, 93, 83, 73, 50]> but was:<[08, 27, 44, 73, 73, 83, 93, 50]> 3) test04b_breadthFirst(eecs2030.lab7.TreeTraversalTest) java.lang.AssertionError: failed for tree with one element expected:<[hello]> but was:<[]> 4) test04c_breadthFirst(eecs2030.lab7.TreeTraversalTest) java.lang.AssertionError: failed for tree with two elements expected:<[hello, goodbye]> but was:<[]> 5) test04d_breadthFirst(eecs2030.lab7.TreeTraversalTest) java.lang.AssertionError: failed for tree with three elements expected:<[hello, goodbye, salut]> but was:<[]> 6) test04e_breadthFirst(eecs2030.lab7.TreeTraversalTest) java.lang.AssertionError: failed for tree in lab document expected:<[50, 27, 73, 08, 44, 83, 73, 93]> but was:<[]> FAILURES!!! Tests run: 20, Failures: 6 -------------------- Your submission: package eecs2030.lab7; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack; import javax.swing.tree.TreeNode; /** * A utility class that provides methods for traversing a binary search tree. * */ public class TreeTraversal { private TreeTraversal() { // empty by design } static List<String> result = new ArrayList<>(); /** * Returns the list of strings formed by traversing the specified tree using * an inorder traversal. * * @param tree * a binary search tree * @return the list of strings formed by traversing the specified tree using * an inorder traversal */ public static List<String> inorder(BinarySearchTree<String> tree) { result.clear(); return TreeTraversal.inorder(tree.root()); // YOU SHOULD IMPLEMENT inorder(INode) below } /** * Returns the list of strings formed by traversing the specified tree using * a preorder traversal. * * @param tree * a binary search tree * @return the list of strings formed by traversing the specified tree using * a preorder traversal */ public static List<String> preorder(BinarySearchTree<String> tree) { result.clear(); return TreeTraversal.preorder(tree.root()); // YOU SHOULD IMPLEMENT preorder(INode) below } /** * Returns the list of strings formed by traversing the specified tree using * a postorder traversal. * * @param tree * a binary search tree * @return the list of strings formed by traversing the specified tree using * a postorder traversal */ public static List<String> postorder(BinarySearchTree<String> tree) { result.clear(); return TreeTraversal.postorder(tree.root()); // YOU SHOULD IMPLEMENT postorder(INode) below } /** * Returns the list of strings formed by traversing the specified tree using * a breadth first traversal. The traversal visits nodes of the tree * starting at the root moving left to right for each level of the tree. * * @param tree * a binary search tree * @return the list of strings formed by traversing the specified tree using * a breadth first traversal */ public static List<String> breadthFirst(BinarySearchTree<String> tree) { List<String> result = new ArrayList<>(); INode<String> root = tree.root(); if (root == null) { return result; } // in Java, a LinkedList is a Queue // to enqueue a node, use the Queue method add // to dequeue a node, use the Queue method remove Queue<INode<String>> q = new LinkedList<>(); return result; } /** * Returns the list of strings formed by traversing a tree having the * specified root using an inorder traversal. * * @param root * the root of the tree * @return the list of strings formed by traversing a tree having the * specified root using an inorder traversal */ private static List<String> inorder(INode<String> root) { if (root == null) { return result; } TreeTraversal.inorder(root.left()); result.add(root.data()); TreeTraversal.inorder(root.right()); return result; } /** * Returns the list of strings formed by traversing a tree having the * specified root using a preorder traversal. * * @param root * the root of the tree * @return the list of strings formed by traversing a tree having the * specified root using a preorder traversal */ private static List<String> preorder(INode<String> root) { if (root == null) { return result; } result.add(root.data()); TreeTraversal.inorder(root.left()); TreeTraversal.inorder(root.right()); return result; } /** * Returns the list of strings formed by traversing a tree having the * specified root using a postorder traversal. * * @param root * the root of the tree * @return the list of strings formed by traversing a tree having the * specified root using a postorder traversal */ private static List<String> postorder(INode<String> root) { if (root == null) { return result; } TreeTraversal.inorder(root.left()); TreeTraversal.inorder(root.right()); result.add(root.data()); return result; } }