code: public Optional<DataType> remove( Object tree, List<String> keys ) {
  
          if ( keys.size() != traversalLength ) {
              throw new TraversrException( "Traversal Path and number of keys mismatch, traversalLength:" + traversalLength + " numKeys:" + keys.size() );
          }
  
          if ( tree == null ) {
              return Optional.empty();
          }
  
          return root.traverse( tree, TraversalStep.Operation.REMOVE, keys.iterator(), null );
      }
docs: Note : Calling this method MAY modify the tree object by adding new Maps and Lists as needed
  for the traversal.  This is determined by the behavior of the implementations of the
  abstract methods of this class.