【问题标题】:Write a function to build a tree from a list [duplicate]编写一个函数来从列表中构建一棵树[重复]
【发布时间】:2013-10-05 01:58:40
【问题描述】:

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

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

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

【问题讨论】:

  • 树的标签是什么?如果只想保留列表的顺序,为什么需要树形结构?
  • 认真的吗?在不到两天的时间内,完全相同的问题?

标签: f#


【解决方案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 以简化您的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多