트리 데이터 유형을 감안할 때 재귀 함수를 작성해야 트리의 깊이가 리턴됩니다. 나는 다음과 같은 데이터 유형을 쓴트리 깊이를 계산하는 재귀 함수 작성
let treeCons x = (\x -> foldl (flip insertTree) Empty x) x
depth (treeCons []) -> 0
depth (treeCons [5,4,6,3,7,1]) -> 4
depth (treeCons [1,2,5,8,9,4,7]) -> 5
depth (treeCons [5,4,6,3,7,1,2,5,8,9,4,7,8,5,3,4]) -> 6
과 기능을 삽입 : 빈 나무는 하나의 루트 노드 트리 1.
예상 출력 반환해야 0을 반환해야합니다, 그러나
data Tree a = Node a (Tree a) (Tree a) | Empty deriving (Show, Eq)
insertTree :: (Ord a) => a -> Tree a -> Tree a
insertTree a Empty = Node a Empty Empty
insertTree a (Node b Empty Empty) = if (a <= b) then (Node b (Node a Empty Empty) Empty) else (Node b Empty (Node a Empty Empty))
insertTree a (Node b left right) = if (a <= b) then (Node b (insertTree a left) right) else (Node b left (insertTree a right))
를 I 깊이 함수를 쓰는 방법을 모르겠다. 나는 haskell에서 아주 새롭고, 누군가가 나를 돕는다면 고맙겠다.
빈 나무와 잎의 깊이를 명시했습니다. 이미 함수 정의의 처음 두 사례를 제공합니다 (잎의 깊이를 지정하는 것은 기술적으로 중복 됨). 그러나 어린이가있는 노드의 깊이는 무엇입니까? 공식적으로 그 내용을 적어두면, 함수 정의의 마지막 경우가 무엇인지 분명해야한다. – sepp2k
'insertTree'에는 두 번째 케이스가 필요하지 않습니다. 'Node b left right '라는 일반적인 경우는 재귀하는 서브 트리가 비어있을 때 기본 케이스'Empty'로 줄어 듭니다. – chepner