Haskell 如何构建树中所有分支的列表?
哈斯克尔的树木有问题。有一棵树:Haskell 如何构建树中所有分支的列表?,haskell,tree,tree-traversal,Haskell,Tree,Tree Traversal,哈斯克尔的树木有问题。有一棵树: data Tree a b = Leaf a | Branch (b,Tree a b) (b,Tree a b) deriving(Eq, Show) tree = Branch ("A",Branch ("C",Leaf 3) ("D",Branch ("G",Leaf 7)
data Tree a b = Leaf a | Branch (b,Tree a b) (b,Tree a b)
deriving(Eq, Show)
tree = Branch
("A",Branch
("C",Leaf 3)
("D",Branch
("G",Leaf 7)
("H",Leaf 6)
)
)
("B",Branch
("E",Leaf 5)
("F",Leaf 4)
)
我需要定义一个函数,它返回树中所有分支的列表,输出如下:[[“a”、“C”]、[“a”、“D”、“G”]、[“a”、“D”、“H”]、[“B”、“E”]、[“B”、“F”]
。我所做的是错误的,但不知道如何修复它:
branch:: Tree a b -> [[b]]
branch (Leaf x) = []
branch (Branch (a,right) (b,left)) = ([y] ++ branch left) ++ ([b] ++ branch right)
我得到的输出是
[“A”、“C”、“D”、“G”、“H”、“B”、“E”、“F”]
我认为这样应该可以:
branch :: Tree a b -> [[b]]
branch (Leaf _) = [[]]
branch (Branch (a, right) (b, left)) = map (a :) (branch right)
++ map (b :) (branch left)
此时,
分支
函数只返回所有节点的列表。