Traversal
This module provides some common tree traversal algorithms that visit all the nodes in a tree data structure in a specific order.
- trees.binary_trees.traversal.Pairs
An iterator of Key-Value pairs. Yield by traversal functions.
alias of
Iterator[Tuple[Any,Any]]
- trees.binary_trees.traversal.SupportedNodeType
Alias for the supported node types.
- trees.binary_trees.traversal.SupportedTreeType
Alias for the supported types of binary trees.
alias of
AVLTree|BinarySearchTree
- trees.binary_trees.traversal.inorder_traverse(tree: AVLTree | BinarySearchTree, recursive: bool = True) Iterator[Tuple[Any, Any]]
Perform In-Order traversal.
In-order traversal traverses a tree by the order: left subtree, current node, right subtree (LDR)
- Parameters:
tree (SupportedTreeType) – A type of binary tree.
recursive (bool) – Perform traversal recursively or not.
- Yields:
Pairs – The next (key, data) pair in the in-order traversal.
Examples
>>> from trees.binary_trees import binary_search_tree >>> from trees.binary_trees import traversal >>> tree = binary_search_tree.BinarySearchTree() >>> tree.insert(key=23, data="23") >>> tree.insert(key=4, data="4") >>> tree.insert(key=30, data="30") >>> tree.insert(key=11, data="11") >>> tree.insert(key=7, data="7") >>> tree.insert(key=34, data="34") >>> tree.insert(key=20, data="20") >>> tree.insert(key=24, data="24") >>> tree.insert(key=22, data="22") >>> tree.insert(key=15, data="15") >>> tree.insert(key=1, data="1") >>> [item for item in traversal.inorder_traverse(tree)] [(1, '1'), (4, '4'), (7, '7'), (11, '11'), (15, '15'), (20, '20'), (22, '22'), (23, '23'), (24, '24'), (30, '30'), (34, '34')]
- trees.binary_trees.traversal.levelorder_traverse(tree: AVLTree | BinarySearchTree) Iterator[Tuple[Any, Any]]
Perform Level-Order traversal.
Level-order traversal traverses a tree: level by level, from left to right, starting from the root node.
- Parameters:
tree (SupportedTreeType) – A type of binary tree.
- Yields:
Pairs – The next (key, data) pair in the level-order traversal.
Examples
>>> from trees.binary_trees import binary_search_tree >>> from trees.binary_trees import traversal >>> tree = binary_search_tree.BinarySearchTree() >>> tree.insert(key=23, data="23") >>> tree.insert(key=4, data="4") >>> tree.insert(key=30, data="30") >>> tree.insert(key=11, data="11") >>> tree.insert(key=7, data="7") >>> tree.insert(key=34, data="34") >>> tree.insert(key=20, data="20") >>> tree.insert(key=24, data="24") >>> tree.insert(key=22, data="22") >>> tree.insert(key=15, data="15") >>> tree.insert(key=1, data="1") >>> [item for item in traversal.levelorder_traverse(tree)] [(23, '23'), (4, '4'), (30, '30'), (1, '1'), (11, '11'), (24, '24'), (34, '34'), (7, '7'), (20, '20'), (15, '15'), (22, '22')]
- trees.binary_trees.traversal.postorder_traverse(tree: AVLTree | BinarySearchTree, recursive: bool = True) Iterator[Tuple[Any, Any]]
Perform Post-Order traversal.
Post-order traversal traverses a tree by the order: left subtree, right subtree, current node (LRD)
- Parameters:
tree (SupportedTreeType) – A type of binary tree.
recursive (bool) – Perform traversal recursively or not.
- Yields:
Pairs – The next (key, data) pair in the post-order traversal.
Examples
>>> from trees.binary_trees import binary_search_tree >>> from trees.binary_trees import traversal >>> tree = binary_search_tree.BinarySearchTree() >>> tree.insert(key=23, data="23") >>> tree.insert(key=4, data="4") >>> tree.insert(key=30, data="30") >>> tree.insert(key=11, data="11") >>> tree.insert(key=7, data="7") >>> tree.insert(key=34, data="34") >>> tree.insert(key=20, data="20") >>> tree.insert(key=24, data="24") >>> tree.insert(key=22, data="22") >>> tree.insert(key=15, data="15") >>> tree.insert(key=1, data="1") >>> [item for item in traversal.postorder_traverse(tree)] [(1, '1'), (7, '7'), (15, '15'), (22, '22'), (20, '20'), (11, '11'), (4, '4'), (24, '24'), (34, '34'), (30, '30'), (23, '23')]
- trees.binary_trees.traversal.preorder_traverse(tree: AVLTree | BinarySearchTree, recursive: bool = True) Iterator[Tuple[Any, Any]]
Perform Pre-Order traversal.
Pre-order traversal traverses a tree by the order: current node, left subtree, right subtree (DLR)
- Parameters:
tree (SupportedTreeType) – A type of binary tree.
recursive (bool) – Perform traversal recursively or not.
- Yields:
Pairs – The next (key, data) pair in the pre-order traversal.
Examples
>>> from trees.binary_trees import binary_search_tree >>> from trees.binary_trees import traversal >>> tree = binary_search_tree.BinarySearchTree() >>> tree.insert(key=23, data="23") >>> tree.insert(key=4, data="4") >>> tree.insert(key=30, data="30") >>> tree.insert(key=11, data="11") >>> tree.insert(key=7, data="7") >>> tree.insert(key=34, data="34") >>> tree.insert(key=20, data="20") >>> tree.insert(key=24, data="24") >>> tree.insert(key=22, data="22") >>> tree.insert(key=15, data="15") >>> tree.insert(key=1, data="1") >>> [item for item in traversal.preorder_traverse(tree)] [(23, '23'), (4, '4'), (1, '1'), (11, '11'), (7, '7'), (20, '20'), (15, '15'), (22, '22'), (30, '30'), (24, '24'), (34, '34')]
- trees.binary_trees.traversal.reverse_inorder_traverse(tree: AVLTree | BinarySearchTree, recursive: bool = True) Iterator[Tuple[Any, Any]]
Perform reversed In-Order traversal.
Reversed in-order traversal traverses a tree by the order: right subtree, current node, left subtree (RNL)
- Parameters:
tree (SupportedTreeType) – A type of binary tree.
recursive (bool) – Perform traversal recursively or not.
- Yields:
Pairs – The next (key, data) pair in the reversed in-order traversal.
Examples
>>> from trees.binary_trees import binary_search_tree >>> from trees.binary_trees import traversal >>> tree = binary_search_tree.BinarySearchTree() >>> tree.insert(key=23, data="23") >>> tree.insert(key=4, data="4") >>> tree.insert(key=30, data="30") >>> tree.insert(key=11, data="11") >>> tree.insert(key=7, data="7") >>> tree.insert(key=34, data="34") >>> tree.insert(key=20, data="20") >>> tree.insert(key=24, data="24") >>> tree.insert(key=22, data="22") >>> tree.insert(key=15, data="15") >>> tree.insert(key=1, data="1") >>> [item for item in traversal.reverse_inorder_traverse(tree)] [(34, '34'), (30, '30'), (24, '24'), (23, '23'), (22, '22'), (20, '20'), (15, '15'), (11, '11'), (7, '7'), (4, '4'), (1, '1')]