Inorder意味着你(1)首先處理左子樹,(2)然後處理節點本身,以及(3)最後處理右子樹。
葉沒有價值
根據您的功能,BinaryTree a
定義,大概是:
data BinaryTree a = Leaf | Node (BinaryTree a) a (BinaryTree a)
因此,這意味着,有兩種情況:在葉的情況下,沒有數據,所以我們簡單地返回給定值:
inorder' _ a Leaf = a -- with an uppercase, otherwise it does match all
而對於Node
情況下,我們在上面已經指出,如何工作的:
inorder' f a (Node left val right) = inorder' f c right
where b = inorder' f a left
c = f b val
或全部:
inorder' :: (b -> a -> b) -> b -> BinaryTree a -> b
inorder' _ a Leaf = a
inorder' f a (Node left val right) = inorder' f c right
where b = inorder' f a left
c = f b val
葉值
在這種情況下,BinaryTree
的定義如下:
data BinaryTree a = Leaf a | Node (BinaryTree a) a (BinaryTree a)
如果葉子有一個值,我們只需要修正第一個子句:
inorder' :: (b -> a -> b) -> b -> BinaryTree a -> b
inorder' f b (Leaf a) = f b a
inorder' f a (Node left val right) = inorder' f c right
where b = inorder' f a left
c = f b val
它產生了什麼錯誤? –
此外請包括'BinaryTree a'的定義。 –