<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def iter_tree(root, on_error=None, follow_links=None):
 	""" 	Walks the specified directory for all files. 	*root* (:class:`str`) is the root directory to search for files. 	*on_error* (:class:`~collections.abc.Callable` or :data:`None`) 	optionally is the error handler for file-system exceptions. It will be 	called with the exception (:exc:`OSError`). Reraise the exception to 	abort the walk. Default is :data:`None` to ignore file-system 	exceptions. 	*follow_links* (:class:`bool` or :data:`None`) optionally is whether 	to walk symbolik links that resolve to directories. Default is 	:data:`None` for :data:`True`. 	Raises :exc:`RecursionError` if recursion is detected. 	Returns an :class:`~collections.abc.Iterable` yielding the path to 	each file (:class:`str`) relative to *root*. 	"""

	if on_error is not None and not callable(on_error):
		raise TypeError("on_error:{!r} is not callable.".format(on_error))

	if follow_links is None:
		follow_links = True

	for file_rel in _iter_tree_next(os.path.abspath(root), '', {}, on_error, follow_links):
		yield file_rel