【问题标题】:how to access number value of tree node with Haskell如何使用 Haskell 访问树节点的数值
【发布时间】:2021-08-12 10:46:20
【问题描述】:

我正在阅读 Haskell 教程 https://www.futurelearn.com/courses/functional-programming-haskell/9/steps/1103477,本节将调用一个将节点插入二叉树的函数。我想添加树是 BST 的约束,因此想将我的基本情况定义为“如果要插入的值小于叶节点处的值,则添加左节点,否则添加一个正确的节点”。 Adding a leaf to Binary Search Tree, Haskell 这里有一个类似的帖子,但它似乎应用了一种尚未使用 @ 引入的技术。如果试图实现这一点,我正在努力寻找一种访问叶节点数值的方法。另外,我不确定我会返回哪个节点。我很想返回插入点。任何帮助将不胜感激。

方法的typedef如下

data Tree = Leaf | Node Int Tree Tree deriving Show

insertNodeToBST :: Tree -> Int -> Tree
insertNodeToBST Leaf value =
  if value < LeafValue
    then (Node value (Node value null null) null)
  else (Node value null (Node value null null))

【问题讨论】:

  • 当你在一个模式中看到t@(...) 时,只需将你看到的每个t 实例替换为右侧的(...),你就可以开始使用了。您应该完全能够将其应用于您在那里找到的问题。
  • 在该数据类型中,叶子没有任何价值,除非您将“叶子”称为Node v Leaf Leaf 之类的东西,即刚好超过两个Leaf 的节点。

标签: haskell


【解决方案1】:

Leafs 没有值,因此您无法从中提取值*。对于Nodes,你可以像往常一样使用模式匹配:

insertNodeToBST (Node valueInTree leftChild rightChild) value = ...

* 这并不意味着如果您看到Leaf,您就会被卡住。 insertNodeToBST Leaf value = ... 的右侧有一个规范的最佳答案——想想吧!

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多