Ich würde eine Hand mit dieser Übung schätzen. Aufgabe 310. Entwerfen Sie die Funktion inorder. Es konsumiert einen Binärbaum und erzeugt die Sequenz aller ssn-Zahlen im Baum, wenn sie von links nach rechts auftauchen, wenn sie eine Baumzeichnung betrachten. Übung 310. "Wie man Programme entwickelt"
Meine Lösung kehrt einfach jeden linken Knoten um, was unterhalb des Knotens ist, und greift dann auf den rechten Knoten zu. Obwohl die Reihenfolge korrekt ist, ist die Antwort nicht im richtigen Format. Dies ist mein Code:
(define-struct no-info [])
(define NONE (make-no-info))
(define-struct node [ssn name left right])
; A BinaryTree (short: BT) is one of:
; – NONE
; – (make-node Number Symbol BT BT)
(define nine9 (make-node 99 "nine9" NONE NONE))
(define one0 (make-node 10 "one0" NONE NONE))
(define two4 (make-node 24 "two4" NONE NONE))
(define one5 (make-node 15 "one5" one0 two4))
(define seven7 (make-node 77 "seven7" NONE NONE))
(define nine5 (make-node 95 "nine5" NONE nine9))
(define two9 (make-node 29 "two9" one5 one8))
(define eight9 (make-node 89 "eight9" seven7 nine5))
(define six3 (make-node 63 "six3" two9 eight9))
; BT -> list
; produce the sequence of ssn numbers from left to right
(define (inorder bt)
(cond
[(no-info? bt) '()]
[else (append (reverse (cons (node-ssn bt) (list (inorder (node-left bt)))))
(inorder (node-right bt)))]))
Dies ist das Ergebnis, wenn ich (inorder six3)
(Liste (Liste (Liste (Liste '() 10) 15'() 24) 29) 63 (Liste ‚() 77) laufen 89 '() 95'() 99)
Vielen Dank dafür. Ich hätte erwähnen sollen, dass die Frage folgenden Hinweis enthielt: Hinweis Verwenden Sie append, die Listen wie folgt verkettet: (append (Liste 1 2 3) (Liste 4) (Liste 5 6 7)) == (Liste 1 2 3 4 5 6 7) – user1897830