Then, when we split out the pieces and do the natural recursions, we end up with many more pieces that we would have. Of course, you won't usually need all of them - the best way is to look at each case and think about what pieces you will need. Here they are:

(define (bt-path-template a-bt a-path)
  (cond
    [(and (boolean? a-bt)
          (null? a-path))
     ...]
    [(and (bt? a-bt)
          (null? a-path))
     (bt-number a-bt)
     (bt-path-template (bt-left a-bt) a-path)
     (bt-path-template (bt-right a-bt) a-path)]
    [(and (boolean? a-bt)
          (eq? 'l (car a-path)))
     (bt-path-template a-bt (cdr a-path))]
    [(and (bt? a-bt)
          (eq? 'l (car a-path)))
    (bt-path-template (bt-left a-bt) a-path)
     (bt-path-template (bt-left a-bt) (cdr a-path))
     
     (bt-path-template (bt-right a-bt) a-path)
     (bt-path-template (bt-right a-bt) (cdr a-path))
     
     (bt-path-template a-bt (cdr a-path))
     
     (bt-number a-bt)]
    [(and (boolean? a-bt)
      (eq? 'r (car a-path)))
     (bt-path-template a-path (cdr a-path))]
    [(and (bt? a-bt)
          (eq? 'r (car a-path)))
     (bt-path-template (bt-left a-bt) a-path)
     (bt-path-template (bt-left a-bt) (cdr a-path))
     
     (bt-path-template (bt-right a-bt) a-path)
     (bt-path-template (bt-right a-bt) (cdr a-path))
     
     (bt-path-template a-bt (cdr a-path))
     
     (bt-number a-bt)]))