Skip to content

Commit 3c234b7

Browse files
authored
Merge pull request #59 from evan2645/introduce-each-level-helper
Add each_level method
2 parents def5322 + a6f966f commit 3c234b7

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

lib/tree.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,28 @@ def each_leaf(&block)
772772
end
773773
end
774774

775+
# Yields every level of the (sub)tree rooted at this node to the
776+
# specified block.
777+
#
778+
# Will yield this node as well since it is considered the first level.
779+
#
780+
# @yieldparam level [Array<Tree::TreeNode>] All nodes in the level
781+
#
782+
# @return [Tree::TreeNode] this node, if a block if given
783+
# @return [Enumerator] an enumerator on this tree, if a block is *not* given
784+
def each_level &block
785+
if block_given?
786+
level = [self]
787+
until level.empty?
788+
yield level
789+
level = level.map(&:children).flatten
790+
end
791+
return self
792+
else
793+
self.each
794+
end
795+
end
796+
775797
# @!endgroup
776798

777799
# @!group Navigating the Child Nodes

0 commit comments

Comments
 (0)