将清单插入Haskell中的二进制树

发布于 2025-01-22 20:20:02 字数 723 浏览 2 评论 0原文

基本上,我试图将元素从列表中插入二进制树中,或者这是我认为在将列表插入到树时应该做的。

这是我的树插入:

data Tree = EmptyTree | Node Integer Tree Tree deriving (Show, Eq, Ord)
insertElement x EmptyTree = Node x EmptyTree EmptyTree
insertElement x (Node a left right) = if x == a
                                  then (Node x left right)
                                  else if x < a
                                  then (Node a (insertElement x left) right)
                                  else
                                  Node a left (insertElement x right)

我认为我可以使用地图从列表中获取元素并将其插入列表中。

类似的东西:inserer x = map(insertelement x eytictree) 我可以使用插入者列表并将其插入列表中。

但是,我认为这个代码几乎是不正确的,我想知道我该怎么做?

Basically, I'm trying to insert elements from the list into the binary tree one by one, or that's what I thought it should be done when inserting list to the tree.

Here is my tree for inserting:

data Tree = EmptyTree | Node Integer Tree Tree deriving (Show, Eq, Ord)
insertElement x EmptyTree = Node x EmptyTree EmptyTree
insertElement x (Node a left right) = if x == a
                                  then (Node x left right)
                                  else if x < a
                                  then (Node a (insertElement x left) right)
                                  else
                                  Node a left (insertElement x right)

and I thought I could use map to get elements from list and insert it into the list.

Something like this: inserter x = map (insertElement x EmptyTree)
where I get list with inserter and insert it into the list.

But, this code is pretty much incorrect I think, and I was wondering how can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

街道布景 2025-01-29 20:20:02

如果您将使用inserer xs = map(`insertelement` ofterytree)将创建一个树的列表,其中每个项目都会插入一次。

您能做的就是使用 foldl ::折叠t =&gt; (b - &gt; a - &gt; b) - &gt; b - &gt; ta-&gt; b foldr ::折叠t =&gt; (a - &gt; b - &gt; b) - &gt; b - &gt; ta-&gt; 每次通过累加器,到

inserter :: Foldable f => f Integer -> Tree
inserter = foldr insertElement EmptyTree

inserter :: Foldable f => f Integer -> Tree
inserter = foldl (flip insertElement) EmptyTree

b 树,因此使用inserer将项目的折叠插入到tree> tree可能已经包含项目的,例如:

inserter :: Foldable f => Tree -> f Integer -> Tree
inserter = foldl (flip insertElement)

If you would use inserter xs = map (`insertElement` EmptyTree) you will create a list of trees where each item is inserted once.

What you can do is use foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b or foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b to each time pass the accumulator, the thus far build up list, and thus insert the next item, so:

inserter :: Foldable f => f Integer -> Tree
inserter = foldr insertElement EmptyTree

or:

inserter :: Foldable f => f Integer -> Tree
inserter = foldl (flip insertElement) EmptyTree

It might however make more sense to allow to specify the base tree, and thus using inserter to insert a Foldable of items to a Tree that might already contain items, for example:

inserter :: Foldable f => Tree -> f Integer -> Tree
inserter = foldl (flip insertElement)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文