球拍中一棵树的折叠功能

问题描述

正在进行球拍编程,我完成了以下任务:

  • 您应该定义一个结构节点,其中包含以下字段:值,左,中,右。该结构表示树结构中的节点。这些字段包含分别存储在节点,左子树,中间子树和右子树中的值。如果子树不存在,则相应的字段应包含一个emptyNode,如下所述。

  • 还应该定义一个emptyNode结构,以在树中指定一个空节点。定义如下:

(struct emptyNode()#:透明)

例如:

(emptyNode)

将代表一棵没有元素的树,并且

(节点5(emptyNode)(emptyNode)(emptyNode))

代表一棵在根部包含5个子树而没有子树的树。

您必须按照指定的名称命名结构和字段(否则我们的测试将失败)。

  • 编写一个函数treeFold,它将一个函数f,一个初始值,初始值和一个树结构tree作为参数。然后,它将产生一个单个值,该值是使用f折叠树中的值的结果(以该顺序使用左,中和右子树)。注意f是一个带有两个参数的函数。第一个参数是树中的值,第二个参数是部分累加的结果。

这是我的尝试:

(define (treeFold f initial tree)
  (cond [(emptyNode? tree)
      (f initial 0)]
        [else (f (node-value tree) (f (treeFold f (treeFold f (treeFold f initial (node-left tree)) (node-middle tree)) (node-right tree))))]))

我不知道为什么这是错的。谁能帮助我解决问题,或者错误在哪里? 谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)