diff --git a/anytree/iterators/levelorderiter.py b/anytree/iterators/levelorderiter.py index 4670101..1de270c 100644 --- a/anytree/iterators/levelorderiter.py +++ b/anytree/iterators/levelorderiter.py @@ -40,11 +40,14 @@ def _iter(children, filter_, stop, maxlevel): level = 1 while children: next_children = [] - for child in children: - if filter_(child): - yield child - next_children += AbstractIter._get_children(child.children, stop) - children = next_children level += 1 if AbstractIter._abort_at_level(level, maxlevel): - break + for child in children: + if filter_(child): + yield child + else: + for child in children: + if filter_(child): + yield child + next_children += AbstractIter._get_children(child.children, stop) + children = next_children diff --git a/anytree/render.py b/anytree/render.py index 155330e..38fb94b 100644 --- a/anytree/render.py +++ b/anytree/render.py @@ -276,13 +276,14 @@ def __iter__(self): def __next(self, node, continues, level=0): yield RenderTree.__item(node, continues, self.style) - children = node.children level += 1 - if children and (self.maxlevel is None or level < self.maxlevel): - children = self.childiter(children) - for child, is_last in _is_last(children): - for grandchild in self.__next(child, continues + (not is_last,), level=level): - yield grandchild + if self.maxlevel is None or level < self.maxlevel: + children = node.children + if children: + children = self.childiter(children) + for child, is_last in _is_last(children): + for grandchild in self.__next(child, continues + (not is_last,), level=level): + yield grandchild @staticmethod def __item(node, continues, style):