;; 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]))