From 0d16d72c4d582f1369bd20e975d133c43656b15e Mon Sep 17 00:00:00 2001 From: Andrea Date: Mon, 26 Jan 2026 00:51:22 +0100 Subject: [PATCH] chore: add some operations --- src/main.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++--- src/tree.py | 36 +++++++++++++++++++++++++++- 2 files changed, 99 insertions(+), 4 deletions(-) diff --git a/src/main.py b/src/main.py index 619b01e..eecebab 100644 --- a/src/main.py +++ b/src/main.py @@ -3,9 +3,12 @@ from strings import * from tree import * -def main(): - - t = build_tree((1, (2, (3, None, None), None), (4, None, None))) +def trees(): + t = build_tree((1, + (2, + (3, None, None), + None), + (4, None, None))) print(t) @@ -14,6 +17,64 @@ def main(): assert t.left.left.val == 3 assert t.right.val == 4 + assert sum_tree(t) == 10 + assert sum_tree(t, 1) == 6 + + t = build_tree((1, + (2, + (3, None, None), + None), + (4, + (5, None, None), + None))) + + print(t) + + assert sum_tree(t, 2) == 8 + + t = build_tree((1, (2, (3, None, None), None), (4, None, None))) + + print(t) + + assert sum_tree(t, 2) == 3 + + t = build_tree((1, + (2, + (3, + None, + (4, None, None) + ), + None), + (5, None, None))) + + print(t) + + assert sum_tree(t, 3) == 4 + + assert tree_height(build_tree((1, None, None))) == 0 + assert tree_height(build_tree((1, + (2, + None, + (3, None, None)), + None))) == 2 + assert tree_height(build_tree( + (1, + (2, None, + (3, None, None)), + (4, None, + (5, None, + (6, + (7, None, None), + None)))) + )) == 4 + + assert number_of_nodes(build_tree((0, None, None))) == 1 + assert number_of_nodes(build_tree((0, (1, None, None), None))) == 2 + assert number_of_nodes(build_tree((0, (1, None, None), (2, None, None)))) == 3 + assert number_of_nodes(build_tree((0, (1, (3, None, None), None), (2, None, None)))) == 4 + +def main(): + pass if __name__ == "__main__": diff --git a/src/tree.py b/src/tree.py index 0591341..625d2f9 100644 --- a/src/tree.py +++ b/src/tree.py @@ -11,7 +11,7 @@ class Tree: def __print_leaf(self, leaf): if leaf: return f"{leaf}" - return "" + return "_" def is_leaf(self): return self.left == None and self.right == None @@ -32,3 +32,37 @@ def build_tree(args): raise RuntimeError("Nodes must be tuples") return Tree(value, build_tree(right), build_tree(left)) + +def sum_tree(t, deep_level=None): + if t == None: + return 0 + + if deep_level == None: + left_val = 0 if t.left == None else sum_tree(t.left) + right_val = 0 if t.right == None else sum_tree(t.right) + return t.val + left_val + right_val + + if deep_level == 0: + return t.val + + left_val = sum_tree(t.left, deep_level - 1) + right_val = sum_tree(t.right, deep_level - 1) + return left_val + right_val + +def tree_height(t): + if t == None: + return 0 + + if t.left == None and t.right == None: + return 0 + + return 1 + max(tree_height(t.left), tree_height(t.right)) + +def number_of_nodes(t): + if t == None: + return 0 + + if t.left == None and t.right == None: + return 1 + + return 1 + number_of_nodes(t.left) + number_of_nodes(t.right)