# [plt-scheme] Binary tree Traversals

In post-order you use append in the wrong way.
In in-order you use list, but you should use append here too.
What type of arguments does append expect in order to act as you want?
Jos
----- Original Message -----
From: "Shrutarshi Basu" <technorapture at gmail.com>
To: <plt-scheme at list.cs.brown.edu>
Sent: Friday, October 10, 2008 3:40 AM
Subject: [plt-scheme] Binary tree Traversals
>* I've written some scheme code for traversing binary trees. Here is my
*>* code:
*>*
*>*
*>* (define (atom? x)
*>* (not (pair? x)))
*>*
*>*
*>* ;;Functions to manipulate a binary tree
*>* (define (leaf? node) (atom? node))
*>* (define (left node) (cadr node))
*>* (define (right node) (caddr node))
*>* (define (label node) (if (leaf? node) node (car node)))
*>*
*>* ;; Preorder Traversal
*>*
*>* (define (pre-order node)
*>* (cons
*>* (label node)
*>* (if (leaf? node)
*>* '()
*>* (append
*>* (pre-order (left node))
*>* (pre-order (right node))))))
*>*
*>* ;;Post-order traversal
*>* (define (post-order node)
*>* (list
*>* (if (leaf? node) '()
*>* (append
*>* (post-order (left node))
*>* (post-order (right node))))
*>* (label node)))
*>*
*>* ;;in-order traversal
*>* (define (in-order node)
*>* (if (leaf? node) (label node)
*>* (list
*>* (in-order (left node))
*>* (cons
*>* (label node)
*>* (in-order (right node))))))
*>*
*>* (define tree '(A (B C D)(E (F G H) I)))
*>* (pre-order tree)
*>* (post-order tree)
*>* (in-order tree)
*>*
*>*
*>*
*>* Though they do work, the post and in-order traversals output as deeply
*>* nested lists and not a simple flat list. Can someone how to get
*>* results in flattened lists (without running a separate flatten routine
*>* on the returned results)?
*>* Thanks
*>* Basu
*>*
*>* --
*>* The ByteBaker :
*>* http://www.bytebaker.com
*>* _________________________________________________
*>* For list-related administrative tasks:
*>* http://list.cs.brown.edu/mailman/listinfo/plt-scheme
*>*
*