(+ 1 (* 2 (- 3 5))) のような算術式が、以下のように葉に数字があり、内部ノードに演算子記号があるツリーのような構造と考えられていると想像してください。
+
/ \
1 *
/ \
2 -
/ \
3 5
ツリーの特定の部分にアクセスするために、これらの関数が既に定義されています。
;; returns tree node
(define (operator lst)
(cadr lst))
;; returns left tree
(define (left-op lst)
(car lst))
;; returns right tree
(define (right-op lst)
(cddr lst))
私は 3 つの関数preorder
、inorder
、およびを記述しようとしています。これらの関数は、postorder
遭遇した順序でトラバースされたツリーのリストを返します。
以前の Java プログラミングからツリー トラバーサルがどのように機能するかは知っていますが、これをコーディングするのに問題があります。
上記の例:
(preorder '(+ 1 (* 2 (- 3 5))))
=>(+ 1 * 2 - 3 5)