Skip to content

Commit e661b98

Browse files
SinghGurneet21github-actionspre-commit-ci[bot]cclauss
authored
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 <[email protected]> * 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 <[email protected]>
1 parent c73cb7e commit e661b98

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

DIRECTORY.md

+1
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
* [Binary Tree Mirror](data_structures/binary_tree/binary_tree_mirror.py)
154154
* [Binary Tree Traversals](data_structures/binary_tree/binary_tree_traversals.py)
155155
* [Fenwick Tree](data_structures/binary_tree/fenwick_tree.py)
156+
* [Inorder Tree Traversal 2022](data_structures/binary_tree/inorder_tree_traversal_2022.py)
156157
* [Lazy Segment Tree](data_structures/binary_tree/lazy_segment_tree.py)
157158
* [Lowest Common Ancestor](data_structures/binary_tree/lowest_common_ancestor.py)
158159
* [Maximum Fenwick Tree](data_structures/binary_tree/maximum_fenwick_tree.py)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
"""
2+
Illustrate how to implement inorder traversal in binary search tree.
3+
Author: Gurneet Singh
4+
https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/
5+
"""
6+
7+
8+
class BinaryTreeNode:
9+
"""Defining the structure of BinaryTreeNode"""
10+
11+
def __init__(self, data: int) -> None:
12+
self.data = data
13+
self.left_child: BinaryTreeNode | None = None
14+
self.right_child: BinaryTreeNode | None = None
15+
16+
17+
def insert(node: BinaryTreeNode | None, new_value: int) -> BinaryTreeNode | None:
18+
"""
19+
If the binary search tree is empty, make a new node and declare it as root.
20+
>>> node_a = BinaryTreeNode(12345)
21+
>>> node_b = insert(node_a, 67890)
22+
>>> node_a.left_child == node_b.left_child
23+
True
24+
>>> node_a.right_child == node_b.right_child
25+
True
26+
>>> node_a.data == node_b.data
27+
True
28+
"""
29+
if node is None:
30+
node = BinaryTreeNode(new_value)
31+
return node
32+
33+
# binary search tree is not empty,
34+
# so we will insert it into the tree
35+
# if new_value is less than value of data in node,
36+
# add it to left subtree and proceed recursively
37+
if new_value < node.data:
38+
node.left_child = insert(node.left_child, new_value)
39+
else:
40+
# if new_value is greater than value of data in node,
41+
# add it to right subtree and proceed recursively
42+
node.right_child = insert(node.right_child, new_value)
43+
return node
44+
45+
46+
def inorder(node: None | BinaryTreeNode) -> list[int]: # if node is None,return
47+
"""
48+
>>> inorder(make_tree())
49+
[6, 10, 14, 15, 20, 25, 60]
50+
"""
51+
if node:
52+
inorder_array = inorder(node.left_child)
53+
inorder_array = inorder_array + [node.data]
54+
inorder_array = inorder_array + inorder(node.right_child)
55+
else:
56+
inorder_array = []
57+
return inorder_array
58+
59+
60+
def make_tree() -> BinaryTreeNode | None:
61+
62+
root = insert(None, 15)
63+
insert(root, 10)
64+
insert(root, 25)
65+
insert(root, 6)
66+
insert(root, 14)
67+
insert(root, 20)
68+
insert(root, 60)
69+
return root
70+
71+
72+
def main() -> None:
73+
# main function
74+
root = make_tree()
75+
print("Printing values of binary search tree in Inorder Traversal.")
76+
inorder(root)
77+
78+
79+
if __name__ == "__main__":
80+
import doctest
81+
82+
doctest.testmod()
83+
main()

0 commit comments

Comments
 (0)