Haskell将有序列表转换为平衡树~代码说明
我有以下练习: 定义函数list2tree,该函数将给定的有序列表转换为平衡树–此树的任何节点的右子树和左子树的高度最多相差1 有人能解释一下这个代码以及它是如何工作的吗?另外,如何在控制台中测试树 解决方案:Haskell将有序列表转换为平衡树~代码说明,haskell,Haskell,我有以下练习: 定义函数list2tree,该函数将给定的有序列表转换为平衡树–此树的任何节点的右子树和左子树的高度最多相差1 有人能解释一下这个代码以及它是如何工作的吗?另外,如何在控制台中测试树 解决方案: 这个函数的作用是将列表中的中间元素作为节点,然后对列表的每一半进行递归m是中间元素的位置,ltx(我相信它的意思是“低于x”)是所有低于x的元素,x和gtx是所有高于x的元素。此函数的作用是将中间元素放在列表中,将其作为节点,然后对列表的每一半进行递归m是中间元素的位置,ltx(我相信它
这个函数的作用是将列表中的中间元素作为节点,然后对列表的每一半进行递归
m
是中间元素的位置,ltx
(我相信它的意思是“低于x”)是所有低于x的元素,x
和gtx
是所有高于x的元素。此函数的作用是将中间元素放在列表中,将其作为节点,然后对列表的每一半进行递归m
是中间元素的位置,ltx
(我相信它的意思是“低于x”)是所有低于x
的元素,gtx
是所有高于x的元素。为了在GHCI中进行测试,将树
作为Show
的一个实例:
data Tree a = Leaf a
| Node a (Tree a) (Tree a)
| Null
deriving (Show)
从命令行启动GHCI,并加载包含Tree
和list2tree
的文件。我叫它4452938.hs
:
Prelude> :load 44520938.hs
[1 of 1] Compiling Answer ( 44520938.hs, interpreted )
Ok, modules loaded: Answer.
现在,您可以使用各种输入列表调用函数进行测试:
*Answer> list2tree []
Null
*Answer> list2tree [1]
Leaf 1
*Answer> list2tree [1, 2]
Node 2 (Leaf 1) Null
*Answer> list2tree [1, 2, 3]
Node 2 (Leaf 1) (Leaf 3)
为了在GHCI中进行测试,将
树
作为显示
的实例:
data Tree a = Leaf a
| Node a (Tree a) (Tree a)
| Null
deriving (Show)
从命令行启动GHCI,并加载包含Tree
和list2tree
的文件。我叫它4452938.hs
:
Prelude> :load 44520938.hs
[1 of 1] Compiling Answer ( 44520938.hs, interpreted )
Ok, modules loaded: Answer.
现在,您可以使用各种输入列表调用函数进行测试:
*Answer> list2tree []
Null
*Answer> list2tree [1]
Leaf 1
*Answer> list2tree [1, 2]
Node 2 (Leaf 1) Null
*Answer> list2tree [1, 2, 3]
Node 2 (Leaf 1) (Leaf 3)
关于代码,您到底不了解什么?到目前为止,您尝试了什么?对于代码,您到底不了解什么?到目前为止,您尝试了什么?在哪里之后,我无法理解这段代码是如何工作的,我需要记住这个测试练习。但是理解它是如何工作的是很重要的。在哪里,我不能理解这个代码是如何工作的,我需要记住这个测试练习。但了解它的工作原理很重要