我在ruby中编写了一个非常简单的递归树遍历方法。我想得到这个遍历的结果,以便我可以轻松地遍历树的节点。
def bottom_up_traversal (node)
if(node.has_leaf_children?)
node.children.each{|i| yield i}
else
node.children.each{|i| bottom_up_traversal(i)}
yield node
end
end
当我试图打电话时,如:
bottom_up_traversal(@root){|this_node| puts this_node }
我得到'错误数量的参数(0表示1)'。我知道这可能只是我用语法做的傻事,但我找不到任何(甚至是基本的)这样做的例子......这让我相信我误解了我应该如何使用代码 - bocks(这对我来说是新事物)
那么,你能否告诉我我应该如何称呼这种方法,或者我哪里出错?
答案 0 :(得分:3)
在您调用bottom_up_traversal(i)
的方法中,第一次调用时,您没有传递原始块。未经测试,但我认为你想要更像这样的东西:
def bottom_up_traversal (node, &block)
if(node.has_leaf_children?)
node.children.each{|i| yield i}
else
node.children.each{|i| bottom_up_traversal(i, &block)}
end
end
###
bottom_up_traversal(@root){|this_node| puts this_node }
答案 1 :(得分:1)
最后,它不是原始的方法调用,而是递归调用自身的方式,这是问题所在,而这并不是因为我没有真正理解代码块是如何工作的。
菲利普的额外'收益自我'的回答完美无缺。
非常感谢!
def bottom_up_traversal (node, &block)
if(node.has_leaf_children?)
node.children.each{|i| yield i}
yield node
else
node.children.each{|i| bottom_up_traversal(i, &block)}
yield node
end
end
称为
bottom_up_traversal(@root){|this_node| puts this_node }
以完美的顺序遍历它们。