实现sumSucc函数时如何调用succTree计算IntTree后继元素总和
sumSucc 实现方案
核心逻辑非常简单,分两步操作即可:
- 调用
succTree处理输入的IntTree,得到所有节点值+1的后继树 - 遍历处理后的后继树,对所有节点的值求和
最简实现(已有树求和工具函数)
如果你的作业环境已经提供了sumTree函数(输入IntTree返回所有节点值之和的工具函数),直接组合两个函数即可:
sumSucc :: IntTree -> Int sumSucc t = sumTree (succTree t)
你也可以用Haskell的函数组合运算符简化写法,和上面的实现完全等价:
sumSucc :: IntTree -> Int sumSucc = sumTree . succTree
无预置sumTree的完整实现
如果没有现成的sumTree函数,你可以先自行实现该工具函数,再组合逻辑:
-- 实现树求和工具函数 sumTree :: IntTree -> Int sumTree (Leaf x) = x sumTree (Branch (x, xl, xr)) = x + sumTree xl + sumTree xr -- 符合作业要求的sumSucc实现,严格调用succTree sumSucc :: IntTree -> Int sumSucc t = sumTree (succTree t)
这个实现和你自己写的直接递归版本输出结果完全一致,且严格满足作业要求:所有节点的加1操作都在succTree内部通过tmap完成,sumSucc没有自行实现节点值+1的逻辑。
内容的提问来源于stack exchange,提问作者Matteo Pinna
相关产品推荐
相关产品推荐

