Fork me on GitHub

This shows a pattern I frequently encounter, and I'm unhappy with:

(defn post-order-tree-seq
 [branch? children root]
 (let [walk (fn walk [n]
              (if (branch? n)
                (concat (mapcat walk (children n)) [n])
   (walk root)))
Using concat like this to control ordering seems unusual. Is it? Is there something better I could be doing here (relating to this, or the code generally - e.g. lazy-seq)