Haskell 这个二叉树代码如何表示一棵树?

Haskell 这个二叉树代码如何表示一棵树?,haskell,data-structures,tree,Haskell,Data Structures,Tree,我在读大学Haskell考试的过去论文时,遇到了一个涉及树的问题,其中树类型是这样实现的: data Tree a = Lf a -- leaf | Tree a :+: Tree a -- branch 然后,它将概述一个可用于各种功能的示例树,例如: ((Lf 1 :+: Lf 2) :+: (Lf 3 :+: Lf 4)) 我对这段代码感到困惑的是,它如何表示一棵树而不具有根元素的概念。根据我的直觉,这里代表的树应该是这

我在读大学Haskell考试的过去论文时,遇到了一个涉及树的问题,其中树类型是这样实现的:

data Tree a = Lf a                  -- leaf
            | Tree a :+: Tree a     -- branch
然后,它将概述一个可用于各种功能的示例树,例如:

((Lf 1 :+: Lf 2) :+: (Lf 3 :+: Lf 4))
我对这段代码感到困惑的是,它如何表示一棵树而不具有根元素的概念。根据我的直觉,这里代表的树应该是这样的:

  / \
/ \ / \
1 2 3 4

但是这样的树没有根元素,只有叶子,这在我看来肯定是错误的。在这段代码中,树实际上是如何表达的?

它是一棵树,数据只存储在叶子中。不要求树的内部节点中有数据,尽管当然许多算法只能对内部节点中有数据的树进行操作(例如BST搜索)


你可能会问这样的结构在什么情况下有用。考虑赫夫曼解码,在内部节点中不需要数据。您只需沿着树向下移动,在0上向左移动,在1上向右移动,直到到达一个叶节点,此时您已经解码了一个字符。

我想我的直觉是正确的。谢谢你清理它!