(可以吗?)如何访问下一个节点的int值(树递归)

时间:2017-11-13 14:29:46

标签: haskell recursion tree

所以我的树定义如下:

data Tree = Node Tree Int Tree | Leaf Int

在这种情况下,Int的{​​{1}}是该Node的值。我试图检查一棵树是否平衡,并且树正在增加,因为它从左到右遍历。

为此,我有一个递归函数,它接受Node并检查(Node left x right)left(它下面的节点)的高度差异是否不超过1。然后我再次呼叫左右平衡。

是否可以访问rightInt的{​​{1}}值?

2 个答案:

答案 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