如何编写一个函数来从F#中的列表构建树?
type Tree =
| Node of (Tree * Tree)
| leaf of int
如果从左边开始读取树的标签,那么它们应该与原始列表的顺序相同。
答案 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
以简化解决方案。