如何编写一个函数来从 F# 中的列表构建一棵树?
type Tree =
| Node of (Tree * Tree)
| leaf of int
如果从左边读取树的标签来写,那么它们应该与原始列表的顺序相同。
如何编写一个函数来从 F# 中的列表构建一棵树?
type Tree =
| Node of (Tree * Tree)
| leaf of int
如果从左边读取树的标签来写,那么它们应该与原始列表的顺序相同。
这里有一些提示可以帮助您入门。鉴于您的定义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
简化您的解决方案。