ツリー データ型を指定すると、ツリーの深さが返される再帰関数を記述する必要があります。ツリーの深さを数えるための再帰関数を書く
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
私は、次のデータ型を書いて、機能挿入します:しかし
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))
を、私の空の木は、単一のルートノードのツリーが1
期待される出力を返す必要があります 0を返す必要がありますどのように深さの関数を書くのか分からない。私はhaskellで非常に新しく、誰かが私を助けてくれたら分かるだろう。
空の木と葉の深さを指定しました。これはすでに関数定義の最初の2つのケースを示しています(ただし、葉の深さを指定することは技術的に冗長です)。しかし、子どもがいるノードの深さはどうですか?これを正式に書いたら、関数定義の最後のケースを明らかにする必要があります。 – sepp2k
'insertTree'には2番目のケースは必要ありません。反復するサブツリーが空の場合、一般的なケース「Node b left right」はベースケース「Empty」に減少します。 – chepner