.net - 中序遍历树并将给定函数应用于所有节点

标签 .net functional-programming f#

我写了一个中序树遍历函数:

let rec inOrder (tree: BinTree<'a>) : 'a list =
    match tree with
    | Leaf -> []
    | Node(x,l,r) -> (inOrder l) @ [x] @ (inOrder r)

现在我想使用这个函数来“映射”所有笔记并应用作为参数给出的函数。它应该接受一个函数和一棵树,然后返回一棵树。这是我到目前为止所拥有的:

let mapInOrder f t = 
    inOrder t
    |> Map.ofList

例如,如果我向函数提供以下输入:

mapInOrder float (Node(1,Node(2,Leaf,Leaf),Node(3,Leaf,Leaf)));;

我想要输出:

(Node(1.0,Node(2.0,Leaf,Leaf),Node(3.0,Leaf,Leaf)))

最佳答案

要将函数映射到List,请使用函数List.map:

let mapInOrder f t = 
    inOrder t
    |> List.map f

但是这个函数会产生一个列表作为输出。您的示例将产生:

[ 1.0 ; 2.0 ; 3.0 ]

要生成您期望的输出,您的 mapInOrder 应该在将函数应用于每个元素后遍历树,生成另一棵树。

关于.net - 中序遍历树并将给定函数应用于所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55000670/

相关文章:

.net - 程序集中的类列表

.net - 您观看过的信息最丰富的 .net 截屏视频有哪些?

.net - 使用类似 IE 的着色和折叠节点在 WinForms 应用程序中显示 XML 文件

c# - NHibernate:如何将查询与 anD 条件结合起来?

functional-programming - 使用arrow-kt的列表理解时的ClassCastException

algorithm - Point Free 与 Haskell 中的列表

scala - 在 scala 中递归构建列表的挑战

f# - 我可以避免在 F# 中进行这种强制转换吗?

generics - 为什么F#编译器有时会错误地泛化函数?

F# 是否可以从结构相等性中排除记录的一个成员?