这里有一段遍历树的代码,但是它并没有起作用:
data Tree = Leaf Int | Node Int Tree Tree deriving Show
preorder(Leaf n) = [n]
preorder(Node n t0 t1) = [n] ++ (preorder t0) ++ (preorder t1)
inorder(Leaf n) = [n]
inorder(Node n t0 t1) = (inorder t0) ++ [n] ++ (inorder t1)
postorder(Leaf n) = [n]
postorder(Node n t0 t1) = (postorder t0) ++ (postorder t1) ++ [n]
我被要求执行以下任务:
Node 8 (Node 3 (Leaf 5) (Leaf 2)) (Node 1 (Leaf 9) (Leaf 6))
当我执行以上语句时,它会原样返回,但实际上应该返回:
preorder t = [8,3,5,2,1,9,6]
inorder t = [5,3,2,8,9,1,6]
postorder t =[5,2,3,9,6,1,8]
我该如何解决这个问题?
postorder (Node 8 (Node 3 (Leaf 5) (Leaf 2)) (Node 1 (Leaf 9) (Leaf 6)))
给出了预期的结果,同时将inorder
和postorder
应用于同一棵树也是如此。 - valdermant = Node 8 (Node 3 (Leaf 5) (Leaf 2)) (Node 1 (Leaf 9) (Leaf 6))
,那么它的运行结果符合预期。 - amindfv节点8(节点3(叶子5)(叶子2))(节点1(叶子9)(叶子6))
,并且得到了相同的结果。这是数据,您需要将其传递给一个函数,以返回一个新值。 - amindfvpreorder(Node 8(Node 3(Leaf 5)(Leaf 2))(Node 1(Leaf 9)(Leaf 6)))
(然后按回车键)。这将对此树评估函数preorder
。 - danr