Lab 7 Feedback

Marking scheme:
--------------------

1.9 / 2  -some unit tests failed; TAs, please check for errors

--------------------

TA Comments:
-in breadthFirst you forgot to add the root node to the queue 

--------------------

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
Time: 0.024
There were 4 failures:

1) test04b_breadthFirst(eecs2030.lab7.TreeTraversalTest)
java.lang.AssertionError: failed for tree with one element expected:<[hello]> but was:<[]>

2) test04c_breadthFirst(eecs2030.lab7.TreeTraversalTest)
java.lang.AssertionError: failed for tree with two elements expected:<[hello, goodbye]> but was:<[]>

3) test04d_breadthFirst(eecs2030.lab7.TreeTraversalTest)
java.lang.AssertionError: failed for tree with three elements expected:<[hello, goodbye, salut]> but was:<[]>

4) 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: 4

--------------------

Your submission:

package eecs2030.lab7;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * A utility class that provides methods for traversing a binary
 * search tree.
 *
 */
public class TreeTraversal {
        private TreeTraversal() {
                // empty by design
        }

        /**
         * 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) {
                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) {
                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) {
                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<>();
                while (!q.isEmpty())
                {
                        INode<String> n = q.remove();

                        result.add(n.data());
                        
                        if (n.left() != null)
                        {
                                q.add(n.left());
                        }
                        
                        if (n.right() != null)
                        {
                                q.add(n.right());
                        }
                }
                
                
                

                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) {
                List<String> result = new ArrayList<>();
                
                if (root == null)
                {
                        return result;
                }
                
                result.addAll(inorder(root.left()));
                result.add(root.data());
                result.addAll(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) {
                List<String> result = new ArrayList<>();
                if (root == null)
                {
                        return result;
                }
                
                result.add(root.data());
                result.addAll(preorder(root.left()));
                result.addAll(preorder(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) {
                List<String> result = new ArrayList<>();
                
                if (root == null)
                {
                        return result;
                }
                
                result.addAll(postorder(root.left()));
                result.addAll(postorder(root.right()));
                result.add(root.data());
                
                return result;
        }
        

}