想象一个算术表达式,例如 (+ 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)