                (assoc %1 name %2)))
            {})
          vals                                               ;get the aggregation
-         (assoc-in node [:data :teams]))))                  ;preserve the tree
+         (assoc-in node [:data :teams]))))
+
+(defn compute-matchup [pick-pts-fn upset-pts-fn loc]
+  (if (zip/end? loc)
+    loc
+    (->> (zip/edit loc (partial update-matchup pick-pts-fn upset-pts-fn))
+         bzip/post-order-next
+         (recur pick-pts-fn upset-pts-fn))))
+
+(defn matchup-info [pick-pts-fn upset-pts-fn tree]
+  (->> tree
+       (zip/zipper
+         branch?
+         children
+         make-node)
+       bzip/post-order-first
+       (compute-matchup pick-pts-fn upset-pts-fn)))
 
 (defn tournament-probabilities
   "Computes the probability of the various outcomes of a tournament.  Calculates the first round, then

                          (get-in [:data :round])
                          dec)
                  max-rnd)]
      (recur max-rnd (zip/next (zip/edit loc (partial update-round rnd)))))))

(defn round-info [max-rounds tree]
  (->> (zip/zipper

                                               upset-pts)
                                             pick-pts))))))

(defn update-matchup [pick-pts-fn upset-pts-fn node]
  (let [round (get-in node [:data :round])
        pick-pts (pick-pts-fn round)
        upset-pts (upset-pts-fn round)]
