Flattening Binary Tree
An ordered binary tree can be flattened into an ordered list by a backwards inorder traversal. We do the inorder backwards so that pushing onto a stack (using cons) can be used to accumulate the result. This accumulation of a result in an extra variable is similar to tail recursion.
(defn flattenbtb [tree result]
(if (cons? tree) ; interior node
(flattenbtb (lhs tree) ; 3. L child
(cons (op tree) ; 2. parent
(flattenbtb
(rhs tree) ; 1. R child
result)))
(if (not (null? tree))
(cons tree result)
result) ) )
(defn flattenbt [tree] (flattenbtb tree '()) )