Traversal of a tree + block code


#1

Hi:

I want to be able to traverse a tree and for each node perform some
random code…sounds like an ideal situation for blocks, right? :slight_smile:

My problem is that I’m not sure how to keep passing the code block in
the recursive call. This is my best attempt so far… i’m not very
strong in this area so any advice would be welcome! :slight_smile:

def self.depthFirstTraversal(parent , &block)
children = parent.children
children.each do |child|
block.call(child)
self.depthFirstTraversal(child) do |node|
block.call(node)
end
end
end


#2

Ahhh…found my solution:

def self.depthFirstTraversal(parent , &block)
children = parent.children
children.each do |child|
block[child]
self.depthFirstTraversal(child, &block)
end
end

I’m not familiar with the [] for passing the argument to the proc(?) …
anyone have any comments?


#3

Andrew G. wrote:

children = parent.children
children.each do |child|
  block.call(child)

Instead of…

  self.depthFirstTraversal(child) do |node|
    block.call(node)
  end

try this…

    depthFirstTraversal(child, &block)

#4

that’s block.call(child), no?


#5

On May 1, 2006, at 2:04 PM, Andrew G. wrote:

children = parent.children
children.each do |child|
  block.call(child)
  self.depthFirstTraversal(child) do |node|

depthFirstTraversal(child, &block)

    block.call(node)
  end

Lose these two lines.

end

end

Just FYI, Ruby naming conventions are to use methods_like_this,
notLikeThisJavaStyle. :wink:

James Edward G. II