我了解算法,但无法使用方案使代码工作。我正在构建一个二叉搜索树。一个节点是一对(键值)。在java中,代码工作正常:
public void inOrder(BinaryNode n) {
if (n != null) {
inOrder(n.left);
System.out.println(n.value);
inOrder(n.right);
}
}
在方案中,我的起始代码如下:
(define empty ())
(define empty? null?)
(define (node_key tn) (list-ref tn 0))
(define (node_val tn) (list-ref tn 1))
(define (node_left tn) (list-ref tn 2))
(define (node_right tn) (list-ref tn 3))
(define (tree-node key value left right) (list key value left right))
(define (get-key tn) (node_key tn))
(define (get-val tn) (node_val tn))
(define (get-left tn) (node_left tn))
(define (get-right tn) (node_right tn))
(define (get-pair tn) (list (get-key tn) (get-val tn)))
(define (atom? tn) (and (empty? (get-left tn)) (empty? (get-right tn))))
(define (printInOrder t)
(if (not (empty? t))
(begin
(printInOrder (get-left t))
(get-pair t)
(printInOrder (get-right t))
)
)
)
但是,如果我们测试 printInOrder:
(define a (tree-node 3 30 empty empty))
(define b (tree-node 1 10 empty empty))
(define c (tree-node 2 20 b a))
(printInOrder c)
它应该打印:
1 10
2 20
3 30
但它不起作用,什么也不打印。
有人可以帮忙解决这个问题吗?谢谢。