编写一个函数来从列表中构建树

时间:2013-10-04 17:31:18

标签: f#

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

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

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

1 个答案:

答案 0 :(得分: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以简化解决方案。