如何遍历字符的二叉树并在scheme中将其转换为字符串

如何遍历字符的二叉树并在scheme中将其转换为字符串,scheme,Scheme,我必须建立一个字符二叉树,列出所有可以创建并转换为字符串的单词 编写一个名为(traverse T)的SCHEME函数,该函数遍历这样一个二叉树,并返回一个所有单词的列表,这些单词可以按照树中从根节点到叶节点的路径来构造。例如,将函数应用于图1中的树应产生以下列表: (“case”“cast”“care”“cart”“crow”“croc”“crab”“cram”)不是解决方案,但有一些提示: 不要过早地从列表转换为字符串,集中精力构建字符列表。 将这些列表转换为字符串作为“后处理”步骤。 (相

我必须建立一个字符二叉树,列出所有可以创建并转换为字符串的单词

编写一个名为(traverse T)的SCHEME函数,该函数遍历这样一个二叉树,并返回一个所有单词的列表,这些单词可以按照树中从根节点到叶节点的路径来构造。例如,将函数应用于图1中的树应产生以下列表:
(“case”“cast”“care”“cart”“crow”“croc”“crab”“cram”)

不是解决方案,但有一些提示:

不要过早地从列表转换为字符串,集中精力构建字符列表。
将这些列表转换为字符串作为“后处理”步骤。
(相关:不要一开始就编写一个一次完成所有任务的函数。问问自己“这其中有没有我已经知道怎么做的部分?”)

假设您有一个节点,其中包含一个字符、从其左子树创建的所有字符列表的列表以及从其右子树创建的所有字符列表的列表。
如何创建包含子树列表中所有内容但前面有“this”节点中的字符的列表

也就是说,如果你有那棵树

 a
/ \
n  t
从创建的
'((#\n))
'(#\t))
子树中,您将如何生成
'((#\a#\n)(#\a#\t))

然后考虑基本情况;一棵空树能产生什么

然后递归地结合你的想法

在下一个阶段中,考虑如何从
'((#\a#\n)(#\a#\t))
(“at”)

(除了
list->string
之外,您可能还需要使用
map
append
cons