当我试图找到只有一个孩子的节点时遇到了一些问题,但是函数没有返回正确的数字(继续返回0)
这是我的代码:
helper(Tree, Acc) ->
case Tree of
{Value, Left, Right} ->
if
{Value, Left, empty} -> helper(Left, Acc +1);
{Value, empty, Right} -> helper(Right, Acc +1);
{Value, Left, Right} -> helper(Left, Acc),
helper(Right, Acc);
true -> Acc
end
end.
1条答案
按热度按时间jrcvhitl1#
您有两个问题:
1.代码中不需要
if
,您可以(也应该)直接在case
语句上进行模式匹配。1.在
if
/case
的第三个子句中调用heper(Right, Acc)
时,您没有保留调用helper(Left, Acc)
的结果。我没有测试它,但我认为如果您这样编写代码,您的代码应该可以工作:
事实上,您根本不需要
case
语句...而且,如果你试图编译它,Erlang会立即告诉你
Value
在任何地方都是未使用的。但是,公平地说......我认为您仍然缺少
{_, empty, empty}
的一个子句。否则,您会将其视为具有恰好一个子节点的节点,而实际上它没有子节点......