--- /dev/null
+(in-package :trees)
+
+(defmethod sequence:length ((binary-tree binary-tree))
+ (size binary-tree))
+
+(defmethod sequence:make-simple-sequence-iterator ((binary-tree binary-tree)
+ &key from-end (start 0) end)
+ (when (or (not (zerop start)) end)
+ (error "~A and ~A are unsupported for ~A" 'start 'end 'binary-tree))
+ (multiple-value-bind (current stack)
+ (extreme-node-with-path (root binary-tree) (not from-end))
+ (declare (ignore current))
+ (values stack NIL from-end)))
+
+(defmethod sequence:iterator-step ((binary-tree binary-tree) iterator from-end)
+ (let* ((current (car iterator))
+ (stack (cdr iterator))
+ (node (if from-end (left current) (right current))))
+ (cond
+ ((null node)
+ stack)
+ (t
+ (multiple-value-bind (current stack)
+ (extreme-node-with-path node (not from-end) stack)
+ (declare (ignore current))
+ stack)))))
+
+(defmethod sequence:iterator-endp ((binary-tree binary-tree) iterator limit from-end)
+ (declare (ignore limit from-end))
+ (null iterator))
+
+(defmethod sequence:iterator-element ((binary-tree binary-tree) iterator)
+ (datum (car iterator)))
+
+;; (defmethod sequence:iterator-index ((binary-tree binary-tree) iterator))