【发布时间】:2021-11-20 14:42:24
【问题描述】:
我正在努力解决如何在 Haskell 中递归遍历二叉树
当返回类型是列表时,它是如何完成的很清楚。但是如果返回类型是树本身,我不明白它是如何完成的?
例如,如果我们有树并希望排除零:
5
/ \
0 2
/ \
0 1
我们想返回一棵带有其他数字的树:
5
/ \
1 2
然后我想你会这样做:
modTree :: Tree -> Tree
modTree Void = Void
modTree (Node l x r)
| x == 0 = modTree l
| otherwise = Node (modTree l) x (modTree r)
我的问题是我知道这只会遍历左侧。但我无法理解如何在 Haskell 中为整个树递归调用该函数。
任何建议都将受到高度赞赏。
【问题讨论】:
-
假设在您的绘图中,根节点
5是0,当前0s 是5。你希望看到哪棵树从modTree中长出来? -
@DanielWagner 然后我不明白描述。 OP,您能否针对
0子树不是叶子的情况发布示例输入/输出? -
@EugeneSh。正确的。现在也许你可以明白我为什么问我做的这个问题了。 ^_^
-
在您的更新中,您 a) 不显示正确的输出,b) 与您关于零只是叶子的评论相矛盾。
-
@AwhatLoop 我非常仔细地问了我的问题(关于交换 5 和 0)。请回答我提出的问题,而不是其他问题。在我的问题中,输入树有两个
5节点:0在根,左树是(4在根,5在左边,1在右边)和右树是5.
标签: haskell binary-tree transformation traversal