networkx.algorithms.tree.coding.to_nested_tuple¶
-
to_nested_tuple
(T, root, canonical_form=False)[source]¶ Returns a nested tuple representation of the given tree.
The nested tuple representation of a tree is defined recursively. The tree with one node and no edges is represented by the empty tuple,
()
. A tree withk
subtrees is represented by a tuple of lengthk
in which each element is the nested tuple representation of a subtree.- Parameters
T (NetworkX graph) – An undirected graph object representing a tree.
root (node) – The node in
T
to interpret as the root of the tree.canonical_form (bool) – If
True
, each tuple is sorted so that the function returns a canonical form for rooted trees. This means “lighter” subtrees will appear as nested tuples before “heavier” subtrees. In this way, each isomorphic rooted tree has the same nested tuple representation.
- Returns
A nested tuple representation of the tree.
- Return type
tuple
Notes
This function is not the inverse of
from_nested_tuple()
; the only guarantee is that the rooted trees are isomorphic.See also
Examples
The tree need not be a balanced binary tree:
>>> T = nx.Graph() >>> T.add_edges_from([(0, 1), (0, 2), (0, 3)]) >>> T.add_edges_from([(1, 4), (1, 5)]) >>> T.add_edges_from([(3, 6), (3, 7)]) >>> root = 0 >>> nx.to_nested_tuple(T, root) (((), ()), (), ((), ()))
Continuing the above example, if
canonical_form
isTrue
, the nested tuples will be sorted:>>> nx.to_nested_tuple(T, root, canonical_form=True) ((), ((), ()), ((), ()))
Even the path graph can be interpreted as a tree:
>>> T = nx.path_graph(4) >>> root = 0 >>> nx.to_nested_tuple(T, root) ((((),),),)