Ich verstehe den Algorithmus, kann aber den Code nicht mit dem Schema zum Laufen bringen. Ich baue einen binären Suchbaum auf. Ein Knoten ist ein Paar von (Schlüsselwert). in Java, der Code funktioniert gut:
public void inOrder(BinaryNode n) {
if (n != null) {
inOrder(n.left);
System.out.println(n.value);
inOrder(n.right);
}
}
im Schema, mein Ausgangscode wie folgt:
(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))
)
)
)
Wenn wir jedoch die 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)
sollte es gedruckt werden:
1 10
2 20
3 30
aber es funktioniert nicht, es wird nichts ausgedruckt.
Kann jemand in dieser Angelegenheit helfen? Danke!