【发布时间】:2017-10-03 21:19:53
【问题描述】:
我尝试从这个结构中创建随机树:
data Tree a = Leaf a
| Funktion (Tree a) (Tree a)
| Lambda (Tree a)
deriving (Show)
我遇到的问题是,我什至不知道如何生成深度为(例如)2 的树,它只有“Lambda”作为节点。如果有人可以帮助我生成这个简单的树(深度 2),我可以随机生成它们。 如果我实现这样的功能:
build (Tree a) 0 = Leaf "A"
build (Tree a) n = build (Lambda a) (n-1)
它不起作用,因为函数构建本身需要一个树作为输入。实际上,我需要具有 Lambda 或 Funktion 节点的树,但首先我需要了解如何生成此结构的简单版本。
【问题讨论】:
-
不,它不需要树作为输入,因为
Tree不是这里的构造函数... -
嗯...那么更好的输入是什么?
-
你说的“随机”是什么意思?
build在树生成中扮演什么角色?你希望它有什么类型?您似乎缺少一些基础知识,例如类型构造函数和数据构造函数之间的区别。也许您应该退后一步,阅读更多介绍性材料? -
没有“n-ary 二叉树”这样的东西。分支因子为 2 的树是二叉树;分支因子为 n 的树是 n 叉树。
-
很抱歉描述有误。我的意思不是 n 叉树。我的代码的结果应该生成一个随机树,给定最大深度。 build 是尝试生成只有 Lambda 节点的树。因为我想了解如何生成树。我知道如何在我的结构中实现树。例如:tree = Funktion (Leaf "A") (Lambda (Leaf "A"))
标签: haskell tree binary-tree