0

如何编写一个函数来从 F# 中的列表构建一棵树?

 type Tree =
         | Node of (Tree * Tree)
         | leaf of int

如果从左边读取树的标签来写,那么它们应该与原始列表的顺序相同。

4

1 回答 1

1

这里有一些提示可以帮助您入门。鉴于您的定义Tree

type Tree = 
    | Leaf of int
    | Node of (Tree * Tree) 

您希望定义一个Tree从整数列表构造值的函数。将问题分解成更小的部分是一种很好的做法,因此您可以从添加单个元素的更简单的函数开始,而不是直接定义fromList函数。为此,您只需要考虑两种情况,即两种可能的树形状,因此已经给出了这样一个函数的存根:

let addInt n tree =
    match tree with
    | Leaf x        -> ??
    | Node (t1,t2)  -> ??

一旦你想出了一个合理的定义,你就可以继续思考如何定义对列表和重用进行操作的函数addInt。这次您需要匹配列表的基本情况:

let rec addMany xs tree =
    match xs with
    | []        -> ??
    | x :: xs   -> ??

一旦您习惯于使用显式递归解决此类问题,您可能会考虑List.fold简化您的解决方案。

于 2013-10-04T17:58:40.763 回答