Haskell의 한 트리 (Data.Tree
으로 표시)를 사용하면 노드 경로를 어떻게 찾을 수 있습니까?Haskell Data.Tree에서 노드의 경로를 찾는 방법
예컨대 보이는 트리를 형성
는import Data.Tree
tree = Node 1 [Node 2 [Node 3 []], Node 4 []]
같은 :
1
|
+- 2
| |
| `- 3
|
`- 4
어떻게 함수를 만들 수 pathToNode
있도록 :
pathToNode 0 tree => []
pathToNode 1 tree => [1]
pathToNode 2 tree => [1, 2]
pathToNode 3 tree => [1, 2, 3]
pathToNode 4 tree => [1, 4]
, 주어진 값은 나타납니다 트리에서 한 번이므로 경로를 반환하는 솔루션을 사용할 수 있습니다.
pathToNode :: (Eq a) => a -> Tree a -> [a]
pathToNode x (Node y ys) | x == y = [x]
| otherwise = case concatMap (pathToNode x) ys of
[] -> []
path -> y:path
가이 글을 쓰는 좀 더 간결한 방법이 있나요 :
지금까지 내 가장 좋은 대답이 무엇입니까? 내 트래버스 로직 작성을 피하기 위해 Data.Foldable
또는 Data.Traversable
을 활용할 수 있습니까?
András Kovács의 답변으로 인해 값이 트리에 두 번 이상 나타날 때 내가 원하는 것을 모호하게 여깁니다. 이제 해결되었습니다. – jml