Tree Iteration¶
Tree Iteration.
PreOrderIter
: iterate over tree using pre-order strategy (self, children)PostOrderIter
: iterate over tree using post-order strategy (children, self)LevelOrderIter
: iterate over tree using level-order strategyLevelOrderGroupIter
: iterate over tree using level-order strategy returning group for every levelZigZagGroupIter
: iterate over tree using level-order strategy returning group for every level
-
class
anytree.iterators.preorderiter.
PreOrderIter
(node, filter_=None, stop=None, maxlevel=None)[source]¶ Bases:
anytree.iterators.abstractiter.AbstractIter
Iterate over tree applying pre-order strategy starting at node.
Start at root and go-down until reaching a leaf node. Step upwards then, and search for the next leafs.
>>> from anytree import Node, RenderTree, AsciiStyle, PreOrderIter >>> f = Node("f") >>> b = Node("b", parent=f) >>> a = Node("a", parent=b) >>> d = Node("d", parent=b) >>> c = Node("c", parent=d) >>> e = Node("e", parent=d) >>> g = Node("g", parent=f) >>> i = Node("i", parent=g) >>> h = Node("h", parent=i) >>> print(RenderTree(f, style=AsciiStyle()).by_attr()) f |-- b | |-- a | +-- d | |-- c | +-- e +-- g +-- i +-- h >>> [node.name for node in PreOrderIter(f)] ['f', 'b', 'a', 'd', 'c', 'e', 'g', 'i', 'h'] >>> [node.name for node in PreOrderIter(f, maxlevel=3)] ['f', 'b', 'a', 'd', 'g', 'i'] >>> [node.name for node in PreOrderIter(f, filter_=lambda n: n.name not in ('e', 'g'))] ['f', 'b', 'a', 'd', 'c', 'i', 'h'] >>> [node.name for node in PreOrderIter(f, stop=lambda n: n.name == 'd')] ['f', 'b', 'a', 'g', 'i', 'h']
Iterate over tree starting at node.
Base class for all iterators.
Keyword Arguments: - filter – function called with every node as argument, node is returned if True.
- stop – stop iteration at node if stop function returns True for node.
- maxlevel (int) – maximum descending in the node hierarchy.
-
class
anytree.iterators.postorderiter.
PostOrderIter
(node, filter_=None, stop=None, maxlevel=None)[source]¶ Bases:
anytree.iterators.abstractiter.AbstractIter
Iterate over tree applying post-order strategy starting at node.
>>> from anytree import Node, RenderTree, AsciiStyle, PostOrderIter >>> f = Node("f") >>> b = Node("b", parent=f) >>> a = Node("a", parent=b) >>> d = Node("d", parent=b) >>> c = Node("c", parent=d) >>> e = Node("e", parent=d) >>> g = Node("g", parent=f) >>> i = Node("i", parent=g) >>> h = Node("h", parent=i) >>> print(RenderTree(f, style=AsciiStyle()).by_attr()) f |-- b | |-- a | +-- d | |-- c | +-- e +-- g +-- i +-- h >>> [node.name for node in PostOrderIter(f)] ['a', 'c', 'e', 'd', 'b', 'h', 'i', 'g', 'f'] >>> [node.name for node in PostOrderIter(f, maxlevel=3)] ['a', 'd', 'b', 'i', 'g', 'f'] >>> [node.name for node in PostOrderIter(f, filter_=lambda n: n.name not in ('e', 'g'))] ['a', 'c', 'd', 'b', 'h', 'i', 'f'] >>> [node.name for node in PostOrderIter(f, stop=lambda n: n.name == 'd')] ['a', 'b', 'h', 'i', 'g', 'f']
Iterate over tree starting at node.
Base class for all iterators.
Keyword Arguments: - filter – function called with every node as argument, node is returned if True.
- stop – stop iteration at node if stop function returns True for node.
- maxlevel (int) – maximum descending in the node hierarchy.
-
class
anytree.iterators.levelorderiter.
LevelOrderIter
(node, filter_=None, stop=None, maxlevel=None)[source]¶ Bases:
anytree.iterators.abstractiter.AbstractIter
Iterate over tree applying level-order strategy starting at node.
>>> from anytree import Node, RenderTree, AsciiStyle, LevelOrderIter >>> f = Node("f") >>> b = Node("b", parent=f) >>> a = Node("a", parent=b) >>> d = Node("d", parent=b) >>> c = Node("c", parent=d) >>> e = Node("e", parent=d) >>> g = Node("g", parent=f) >>> i = Node("i", parent=g) >>> h = Node("h", parent=i) >>> print(RenderTree(f, style=AsciiStyle()).by_attr()) f |-- b | |-- a | +-- d | |-- c | +-- e +-- g +-- i +-- h >>> [node.name for node in LevelOrderIter(f)] ['f', 'b', 'g', 'a', 'd', 'i', 'c', 'e', 'h'] >>> [node.name for node in LevelOrderIter(f, maxlevel=3)] ['f', 'b', 'g', 'a', 'd', 'i'] >>> [node.name for node in LevelOrderIter(f, filter_=lambda n: n.name not in ('e', 'g'))] ['f', 'b', 'a', 'd', 'i', 'c', 'h'] >>> [node.name for node in LevelOrderIter(f, stop=lambda n: n.name == 'd')] ['f', 'b', 'g', 'a', 'i', 'h']
Iterate over tree starting at node.
Base class for all iterators.
Keyword Arguments: - filter – function called with every node as argument, node is returned if True.
- stop – stop iteration at node if stop function returns True for node.
- maxlevel (int) – maximum descending in the node hierarchy.
-
class
anytree.iterators.levelordergroupiter.
LevelOrderGroupIter
(node, filter_=None, stop=None, maxlevel=None)[source]¶ Bases:
anytree.iterators.abstractiter.AbstractIter
Iterate over tree applying level-order strategy with grouping starting at node.
Return a tuple of nodes for each level. The first tuple contains the nodes at level 0 (always node). The second tuple contains the nodes at level 1 (children of node). The next level contains the children of the children, and so on.
>>> from anytree import Node, RenderTree, AsciiStyle, LevelOrderGroupIter >>> f = Node("f") >>> b = Node("b", parent=f) >>> a = Node("a", parent=b) >>> d = Node("d", parent=b) >>> c = Node("c", parent=d) >>> e = Node("e", parent=d) >>> g = Node("g", parent=f) >>> i = Node("i", parent=g) >>> h = Node("h", parent=i) >>> print(RenderTree(f, style=AsciiStyle()).by_attr()) f |-- b | |-- a | +-- d | |-- c | +-- e +-- g +-- i +-- h >>> [[node.name for node in children] for children in LevelOrderGroupIter(f)] [['f'], ['b', 'g'], ['a', 'd', 'i'], ['c', 'e', 'h']] >>> [[node.name for node in children] for children in LevelOrderGroupIter(f, maxlevel=3)] [['f'], ['b', 'g'], ['a', 'd', 'i']] >>> [[node.name for node in children] ... for children in LevelOrderGroupIter(f, filter_=lambda n: n.name not in ('e', 'g'))] [['f'], ['b'], ['a', 'd', 'i'], ['c', 'h']] >>> [[node.name for node in children] ... for children in LevelOrderGroupIter(f, stop=lambda n: n.name == 'd')] [['f'], ['b', 'g'], ['a', 'i'], ['h']]
Iterate over tree starting at node.
Base class for all iterators.
Keyword Arguments: - filter – function called with every node as argument, node is returned if True.
- stop – stop iteration at node if stop function returns True for node.
- maxlevel (int) – maximum descending in the node hierarchy.
-
class
anytree.iterators.zigzaggroupiter.
ZigZagGroupIter
(node, filter_=None, stop=None, maxlevel=None)[source]¶ Bases:
anytree.iterators.abstractiter.AbstractIter
Iterate over tree applying Zig-Zag strategy with grouping starting at node.
Return a tuple of nodes for each level. The first tuple contains the nodes at level 0 (always node). The second tuple contains the nodes at level 1 (children of node) in reversed order. The next level contains the children of the children in forward order, and so on.
>>> from anytree import Node, RenderTree, AsciiStyle >>> f = Node("f") >>> b = Node("b", parent=f) >>> a = Node("a", parent=b) >>> d = Node("d", parent=b) >>> c = Node("c", parent=d) >>> e = Node("e", parent=d) >>> g = Node("g", parent=f) >>> i = Node("i", parent=g) >>> h = Node("h", parent=i) >>> print(RenderTree(f, style=AsciiStyle()).by_attr()) f |-- b | |-- a | +-- d | |-- c | +-- e +-- g +-- i +-- h >>> [[node.name for node in children] for children in ZigZagGroupIter(f)] [['f'], ['g', 'b'], ['a', 'd', 'i'], ['h', 'e', 'c']] >>> [[node.name for node in children] for children in ZigZagGroupIter(f, maxlevel=3)] [['f'], ['g', 'b'], ['a', 'd', 'i']] >>> [[node.name for node in children] ... for children in ZigZagGroupIter(f, filter_=lambda n: n.name not in ('e', 'g'))] [['f'], ['b'], ['a', 'd', 'i'], ['h', 'c']] >>> [[node.name for node in children] ... for children in ZigZagGroupIter(f, stop=lambda n: n.name == 'd')] [['f'], ['g', 'b'], ['a', 'i'], ['h']]
Iterate over tree starting at node.
Base class for all iterators.
Keyword Arguments: - filter – function called with every node as argument, node is returned if True.
- stop – stop iteration at node if stop function returns True for node.
- maxlevel (int) – maximum descending in the node hierarchy.