mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Binary Search Tree Inorder Traversal Algorithm (#6840)
* Binary Search Tree Inorder Traversal * updating DIRECTORY.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Binary Search Tree Inorder Traversal v2 * Binary Search Tree Inorder Traversal * Binary Search Tree Inorder Traversal * Update inorder_tree_traversal_2022.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update inorder_tree_traversal_2022.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update inorder_tree_traversal_2022.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update data_structures/binary_tree/inorder_tree_traversal_2022.py * Update data_structures/binary_tree/inorder_tree_traversal_2022.py * Updated * Updated * Update inorder_tree_traversal_2022.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update inorder_tree_traversal_2022.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update data_structures/binary_tree/inorder_tree_traversal_2022.py Co-authored-by: Christian Clauss <cclauss@me.com> * Updated and removed print statement removed the print from inorder function * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
parent
c73cb7e3f7
commit
e661b98829
|
@ -153,6 +153,7 @@
|
|||
* [Binary Tree Mirror](data_structures/binary_tree/binary_tree_mirror.py)
|
||||
* [Binary Tree Traversals](data_structures/binary_tree/binary_tree_traversals.py)
|
||||
* [Fenwick Tree](data_structures/binary_tree/fenwick_tree.py)
|
||||
* [Inorder Tree Traversal 2022](data_structures/binary_tree/inorder_tree_traversal_2022.py)
|
||||
* [Lazy Segment Tree](data_structures/binary_tree/lazy_segment_tree.py)
|
||||
* [Lowest Common Ancestor](data_structures/binary_tree/lowest_common_ancestor.py)
|
||||
* [Maximum Fenwick Tree](data_structures/binary_tree/maximum_fenwick_tree.py)
|
||||
|
|
83
data_structures/binary_tree/inorder_tree_traversal_2022.py
Normal file
83
data_structures/binary_tree/inorder_tree_traversal_2022.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
"""
|
||||
Illustrate how to implement inorder traversal in binary search tree.
|
||||
Author: Gurneet Singh
|
||||
https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/
|
||||
"""
|
||||
|
||||
|
||||
class BinaryTreeNode:
|
||||
"""Defining the structure of BinaryTreeNode"""
|
||||
|
||||
def __init__(self, data: int) -> None:
|
||||
self.data = data
|
||||
self.left_child: BinaryTreeNode | None = None
|
||||
self.right_child: BinaryTreeNode | None = None
|
||||
|
||||
|
||||
def insert(node: BinaryTreeNode | None, new_value: int) -> BinaryTreeNode | None:
|
||||
"""
|
||||
If the binary search tree is empty, make a new node and declare it as root.
|
||||
>>> node_a = BinaryTreeNode(12345)
|
||||
>>> node_b = insert(node_a, 67890)
|
||||
>>> node_a.left_child == node_b.left_child
|
||||
True
|
||||
>>> node_a.right_child == node_b.right_child
|
||||
True
|
||||
>>> node_a.data == node_b.data
|
||||
True
|
||||
"""
|
||||
if node is None:
|
||||
node = BinaryTreeNode(new_value)
|
||||
return node
|
||||
|
||||
# binary search tree is not empty,
|
||||
# so we will insert it into the tree
|
||||
# if new_value is less than value of data in node,
|
||||
# add it to left subtree and proceed recursively
|
||||
if new_value < node.data:
|
||||
node.left_child = insert(node.left_child, new_value)
|
||||
else:
|
||||
# if new_value is greater than value of data in node,
|
||||
# add it to right subtree and proceed recursively
|
||||
node.right_child = insert(node.right_child, new_value)
|
||||
return node
|
||||
|
||||
|
||||
def inorder(node: None | BinaryTreeNode) -> list[int]: # if node is None,return
|
||||
"""
|
||||
>>> inorder(make_tree())
|
||||
[6, 10, 14, 15, 20, 25, 60]
|
||||
"""
|
||||
if node:
|
||||
inorder_array = inorder(node.left_child)
|
||||
inorder_array = inorder_array + [node.data]
|
||||
inorder_array = inorder_array + inorder(node.right_child)
|
||||
else:
|
||||
inorder_array = []
|
||||
return inorder_array
|
||||
|
||||
|
||||
def make_tree() -> BinaryTreeNode | None:
|
||||
|
||||
root = insert(None, 15)
|
||||
insert(root, 10)
|
||||
insert(root, 25)
|
||||
insert(root, 6)
|
||||
insert(root, 14)
|
||||
insert(root, 20)
|
||||
insert(root, 60)
|
||||
return root
|
||||
|
||||
|
||||
def main() -> None:
|
||||
# main function
|
||||
root = make_tree()
|
||||
print("Printing values of binary search tree in Inorder Traversal.")
|
||||
inorder(root)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
||||
main()
|
Loading…
Reference in New Issue
Block a user