方案树图

时间:2013-04-12 06:42:18

标签: scheme sicp

写入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 () ()))

2 个答案:

答案 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 }} 或不。如果没有,请在每个分支上再次调用该函数。