Skip to content

Commit 7892bf8

Browse files
authored
feat: Binary tree node sum (TheAlgorithms#7020)
1 parent 4d0c830 commit 7892bf8

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

DIRECTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
* [Binary Search Tree](data_structures/binary_tree/binary_search_tree.py)
152152
* [Binary Search Tree Recursive](data_structures/binary_tree/binary_search_tree_recursive.py)
153153
* [Binary Tree Mirror](data_structures/binary_tree/binary_tree_mirror.py)
154+
* [Binary Tree Node Sum](data_structures/binary_tree/binary_tree_node_sum.py)
154155
* [Binary Tree Traversals](data_structures/binary_tree/binary_tree_traversals.py)
155156
* [Fenwick Tree](data_structures/binary_tree/fenwick_tree.py)
156157
* [Inorder Tree Traversal 2022](data_structures/binary_tree/inorder_tree_traversal_2022.py)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from __future__ import annotations
2+
3+
4+
class Node:
5+
"""
6+
A Node has value variable and pointers
7+
to Nodes to its left and right.
8+
"""
9+
10+
def __init__(self, value: int) -> None:
11+
self.value = value
12+
self.left: Node | None = None
13+
self.right: Node | None = None
14+
15+
16+
class BinaryTreeNodeSum:
17+
r"""
18+
The below tree looks like this
19+
10
20+
/ \
21+
5 -3
22+
/ / \
23+
12 8 0
24+
25+
>>> tree = Node(10)
26+
>>> BinaryTreeNodeSum(tree).node_sum()
27+
10
28+
29+
>>> tree.left = Node(5)
30+
>>> BinaryTreeNodeSum(tree).node_sum()
31+
15
32+
33+
>>> tree.right = Node(-3)
34+
>>> BinaryTreeNodeSum(tree).node_sum()
35+
12
36+
37+
>>> tree.left.left = Node(12)
38+
>>> BinaryTreeNodeSum(tree).node_sum()
39+
24
40+
41+
>>> tree.right.left = Node(8)
42+
>>> tree.right.right = Node(0)
43+
>>> BinaryTreeNodeSum(tree).node_sum()
44+
32
45+
"""
46+
47+
def __init__(self, tree: Node) -> None:
48+
self.tree = tree
49+
50+
def depth_first_search(self, node: Node | None) -> int:
51+
if node is None:
52+
return 0
53+
return node.value + (
54+
self.depth_first_search(node.left) +
55+
self.depth_first_search(node.right)
56+
)
57+
58+
def node_sum(self) -> int:
59+
return self.depth_first_search(self.tree)
60+
61+
if __name__ == "__main__":
62+
import doctest
63+
64+
doctest.testmod()
65+

0 commit comments

Comments
 (0)