写入n个类似函数(maptree f t)
,它返回通过将函数f
应用于二叉树t
的每个条目而生成的树。 (就像map一样)由于树是数据抽象,因此只允许以下内容在树上运行:(entry t) (right-branch t) (left-branch t) (make=tree entry left right), and (empty-tree? t)
。您可以使用预定义常量the-empty-tree
。
示例:
(define tree
(make-tree 10 (make-tree 5 the-empty-tree the-empty-tree)
(make-tree 12 the-empty-tree the-empty-tree)))
tree
(10 (5 () ())(12 () ()))
(maptree square tree)
(100 (25 () ())(144 () ()))
答案 0 :(得分:1)
像这样:
(define (maptree func tree)
(if (empty-tree? tree)
the-empty-tree
(make-tree (func (entry tree))
(maptree func (left-branch tree))
(maptree func (right-branch tree)))))
当递归地定义数据结构时,函数的实现可以自然地递归。在这种情况下,在一个树项上执行该功能,然后递归左右子树。
答案 1 :(得分:0)
这似乎是一个家庭作业问题。一个很好的起点是在重建树时以递归方式向下移动树。检查左侧和右侧是否为空,如果没有在每个分支上再次调用您的地图功能。
从顶部开始(第一个entry
)并创建一个新树,将f
函数应用于entry
并检查左右分支是否为{{1 }} 或不。如果没有,请在每个分支上再次调用该函数。