Je suis nouveau sur Racket et j'ai lu de nombreuses pages d'informations, mais j'ai du mal à implémenter un arbre général sous la forme d'une liste de nombres. Si je prends dans l'entrée de l'arbre pré-ordre de stdin:Conversion de l'arborescence générale en pré-commande pour publication dans Racket
1 3
2 2
5 0
6 0
3 1
7 0
4 4
8 0
9 0
10 0
11 1
12 0
où le premier numéro représente la valeur du nœud et la deuxième valeur représente le nombre d'enfants du nœud a. J'essaierait de produire mon résultat attendu avant de le convertir en post-ordre:
'(1 (2 (5 6)) (3 (7)) (4 (8 9 10 11 (12))))
Jusqu'à présent, je donne les résultats suivants:
(define recurse 0)
(define (getTreeInfo)
(local ((define line (read-line)))
(if (eof-object? line)
empty
(if (= recurse 1)
(makeTree (string->number(first (string-split line))) (- (string->number(second (string-split line))) 1))
(makeTree (string->number(first (string-split line))) (string->number(second (string-split line))))))))
(define (makeTree value numChildren)
(cond
[(= numChildren 0) (begin (set! recurse 0)
(printf "Recurse: ~a\n" recurse)
(cons)]
[else (begin (set! recurse 1)
(printf "Recurse: ~a\n" recurse)
(cons value (getTreeInfo)))]))
Le code est pas complet ni correct, mais c'est un point de départ de mon processus de réflexion. Des idées pour aborder cette traversée? Je me sens comme la récurrence mutuelle est nécessaire ici.