;; a number-tree is either:
;;   number
;;   (make-node number-tree number-tree)
(define-struct node (left right))

Design the function same-shape?. It consumes two number trees and returns a boolean indicating if the trees have the same shape, regardless of the numbers in the tree.

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

Solution

;; same-shape? : number-tree number-tree -> boolean
(define (same-shape? t1 t2)
  (cond
    [(and (number? t1) (number? t2)) true]
    [(and (node? t1) (node? t2))
     (and (same-shape? (node-left t1) (node-left t2))
          (same-shape? (node-right t2) (node-right t2)))]
    [else false]))