Так что я в основном хочу printbst's .. вот немного подробнее
Предоставляет функцию (printbst t), которая печатает BST, созданный из BST, как предоставлено bst.rkt в следующем формате:
-Каждый узел в BST должен быть напечатан в отдельной строке;
- левое поддерево должно быть напечатано после корня;
-Правое поддерево должно быть напечатано перед корнем;
-Ключевое значение должно иметь отступ в 2d пробелах, где d - его глубина или расстояние от корня. То есть корень не должен иметь отступ, ключи в его поддеревьях должны иметь 2 пробела, ключи в их поддеревьях 4 пробела и т. Д.
Например, полное дерево, содержащее {1,2,3,4,5,6}, будет напечатано так:
6
5
4
3
2
1
Заметьте, что если вы повернете выход по часовой стрелке и подключите каждый узел к его поддеревьям, вы получите традиционное графическое представление дерева. Не используйте мутации.
Вот что у меня есть:
#lang racket
;;Note: struct-out exports all functions associated with the structure
(provide (struct-out BST))
(define-struct BST (key left right) #:transparent)
(define (depth key bst)
(cond
[(or (empty? bst) (= key (BST-key bst))) 0]
[else (+ 1 (depth key (BST-right bst)) (depth key (BST-left bst)))]))
(define (indent int)
(cond
[(= int 0) ""]
[else " " (indent (sub1 int))]))
(define (printbst t)
(cond
[(empty? t) (newline)]
[(and (empty? (BST-right t)) (empty? (BST-left t)))
(printf "~a~a" (indent (depth (BST-key t) t)) (BST-key t))]))
Мой printbst только печатает дерево с одним узлом, ты ... У меня есть идея, но она связана с мутацией, которую я не могу использовать :( ..... Любые предложения? Должен ли я изменить свой подход к проблеме все вместе?