Design Pattern: Binary Tree Recursion
If we are using the form of binary tree that has contents, left and right, we can alter the design pattern slightly:
(defun myfun (tree)
(if (not (null tree))
(combine (contents tree)
(myfun (left tree))
(myfun (right tree)))
(if (test tree) ; leaf
(baseanswer tree)
safeanswer ) ) )
safeanswer depends on the combine:
| combine | safeanswer = identity |
| + | 0 |
| * | 1 |
| and, every | true |
| or, some | false |
| min | Integer.MAX_VALUE |
| max | Integer.MIN_VALUE |
| union | null |