所以我的树定义如下:
data Tree = Node Tree Int Tree | Leaf Int
在这种情况下,Int
的{{1}}是该Node
的值。我试图检查一棵树是否平衡,并且树正在增加,因为它从左到右遍历。
为此,我有一个递归函数,它接受Node
并检查(Node left x right)
和left
(它下面的节点)的高度差异是否不超过1。然后我再次呼叫左右平衡。
是否可以访问right
和Int
的{{1}}值?
答案 0 :(得分:3)
是的,您可以编写一个在顶部节点返回整数的函数:
getInt (Node _ i _) = i
getInt (Leaf i) = i
E.g。
Prelude> getInt $ Leaf 42
42
Prelude> getInt $ Node (Leaf 42) 123 (Leaf 1337)
123
答案 1 :(得分:2)
当然你可以,而不是像左右一样放置变量,再次使用构造函数:
编辑,我忘了Leaf的情况,它也有一个int:
data Tree = Node Tree Int Tree | Leaf Int
exampleSumNodes (Node left x right) = (treeToInt left) + x + (treeToInt right)
treeToInt (Node _ n _) = n
treeToInt (Leaf n ) = n