         return node
     }
     
+    /**
+     Provides quick access to the immutable array containing all of the values within the BinarySearchTree.
+     
+     - Returns: Array containing all of the values
+     */
     public func values() -> [T] {
         return self.table
     }
     
+    /**
+     Finds the node with the highest comparable value within the BinarySearchTree.
+     
+     - Returns: optional node
+     */
     public func max() -> Node<T>? {
         return maximum(root!)!
     }
     
+    /**
+     Finds the node with the lowest comparable value within the BinarySearchTree.
+     
+     - Returns: optional node
+     */
     public func min() -> Node<T>? {
         return minimum(root!)!
     }

    
    // MARK: - Error
    enum NodeError: Error {
        case PreExistingValue// = "Node with value: already exists within BinarySearchTree!"
        case InvalidNodeException// = "Node with value does not exist!"
        case RootNilException //= "Root must be set before any other nodes are added!"
    }
    
    // MARK: - Private

    
    // MARK: - Public API
    
    /**
     Searches for the passed in value, if present returns that node.
     
     - Parameter value: The value to be searched for.
     - Returns: optional node with specified value.
     */
    public func get(_ value: T) -> Node<T>?{
        return search(indexNode: root, value: value)
    }
    
    /**
     Places a new node with specified value into the current BinarySearchTree.
     
     - Parameter value: The value of the new node.
     - Throws:
         - RootNilException: if the root node's value is undefined.
         - PreExistingValue: if there is already a node with the same value.
     
     */
    public func put(_ value: T) throws -> Void{
        if root == nil || root?.value == nil {throw NodeError.RootNilException}
        if table.contains(value) {throw NodeError.PreExistingValue}
