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