하스켈을 처음 접했고이 사실을 알 수 없다. 주어진 이진 트리의 Node
이 자식보다 큰지 확인하는 방법은 무엇입니까?유전자 정렬을위한 하스켈 바이너리 트리 술어
module IntTree where
data IntTree = Leaf Int
| Node Int IntTree IntTree
deriving (Eq,Show)
t1 :: IntTree
t1 = Node 1999 (Node 1963 (Leaf 1925)
(Leaf 1933))
(Node 1956 (Leaf 1932)
(Leaf 1924))
t2 :: IntTree
t2 = Node 1999 (Node 1922 (Leaf 1925)
(Leaf 1933))
(Node 1956 (Leaf 1932)
(Leaf 1924))
descendingTree :: Ord a => IntTree -> Bool
는 노드의 값이 두 아이의 노드의 값보다 큰 트리의 모든 노드에 대한 사실 여부를 신호, IntTree
을 얻을 것이다 대가로 나에게 부울을 줄 것이다 기능 descendingTree
; 물론 아이들이 있다면. 이 함수를 작성하려면 어떻게해야합니까?
당신은'data tree a = Leaf a | 노드 (트리 a) a (트리 a)'? 그렇지 않으면'descendingTree'에 대한'Ord a' 제약 조건은 의미가 없습니다. 어쨌든, 당신은 이미 무엇을 시도 했습니까? 나는 당신에게 힌트를주고 노드가 모든 자식 노드보다 큰지 여부를 검사한다면 그 노드의 값은 그 노드와 모든 자식 노드의 최대 값이라는 것을 말해 줄 것이다. 따라서'Node'를 검사 할 때 두 개의 하위 트리를 모두 확인한 다음 하위 트리의 루트에있는 값과 현재의'Node' 자체 사이의 비교를 실행하십시오. – HTNW
무엇이 당신의 질문입니까? –
바이너리 트리를 정렬하는 멋지고 효율적인 방법 중 하나는 'Zipper'유형에 의해 가능합니다. 나는 당신에게 [Zippers] (http://learnyouahaskell.com/zippers) – Redu