Functional Problem Solving (CSC 151 2013F) : EBoards

Extra topics, Week 10


Overview

Admin

What might be on the quiz?

Nothing. No quiz.

Background: Recursion over trees

First structure

(define tree-proc
  (lambda (tree)
     (if (pair? tree)
         (combine (tree-proc (car tree))
                  (tree-proc (cdr tree)))
         base-case)))

Second structure

(define tree-proc
  (lambda (tree)
     (if (pair? tree)
         (let ((left-result (tree-proc (car tree)))
               (right-result (tree-proc (cdr tree))))
           (combine left-result right-result))
         base-case)))

Two standard procedures: height and size

Analysis

subvector->tree

Review:

Analysis

5c

(define height-balanced
  (lambda (tree)
     (if (pair? tree)
         (let ((left-result (height-balanced (car tree)))
               (right-result (height-balanced (cdr tree))))
           (cond 
             [(not left-result) #f]
             [(not right-result) #f]
             [(not (<= (abs (- left-result right-result)) 1)) #f]
             [else (+ 1 left-result right-result)])))))
         0)))

More elegant with ands and ors.


Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright (c) 2007-2013 Janet Davis, Samuel A. Rebelsky, and Jerod Weinman. (Selected materials are copyright by John David Stone or Henry Walker and are used with permission.)

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.