(define sum-of-number-tree (lambda (tree) ; If it's just a simple value, use that value (if (not (pair? tree)) tree (let ( ; Sum everything in the left subtree (left-sum (sum-of-number-tree (car tree))) ; Sum everything in the right subtre (right-sum (sum-of-number-tree (cdr tree)))) ; Put 'em together (+ left-sum right-sum))))) (define depth (lambda (tree) (if (not (pair? tree)) 0 (let ((left-depth (depth (car tree))) (right-depth (depth (cdr tree)))) (+ 1 (max left-depth right-depth)))))) (define number-tree? (lambda (tree) (if (not (pair? tree)) (number? tree) (let ((left (number-tree? (car tree))) (right (number-tree? (cdr tree)))) (and left right)))))