Design the function same-fringe?. It consumes two number trees and returns true if the trees have the same numbers, regardless of the shape.

;; examples
(equal? (same-fringe? 1 2) false)
(equal? (same-fringe? 1 1) true)
(equal? (same-fringe? (make-node 1 2) (make-node 3 4)) false)
(equal? (same-fringe? (make-node 1 2) (make-node 1 2)) true)
(equal? (same-fringe? (make-node 1 2) 5) false)
(equal? (same-fringe? (make-node 1 (make-node 2 3)) 
                      (make-node (make-node 1 2) 3)) 
        true)

Solution

;; same-fringe? : number-tree number-tree -> boolean
(define (same-fringe? t1 t2)
  (same-list? (to-list t1)
              (to-list t2)))

;; to-list : number-tree -> (listof numbers)
(define (to-list t)
  (cond
    [(number? t) (list t)]
    [else (append (to-list (node-left t))
                  (to-list (node-right t)))]))

;; same-list? : list-of-numbers list-of-numbers -> boolean
(define (same-list? l1 l2)
  (cond
    [(and (empty? l1) (empty? l2)) true]
    [else (and (= (first l1) (first l2))
               (same-list? (rest l1) (rest l2)))]))