chore: add some operations
Some checks failed
Run tests / test (push) Failing after 14s
Code Quality / lint (push) Successful in 16s

This commit is contained in:
2026-01-26 00:51:22 +01:00
parent 133f432c45
commit 0d16d72c4d
2 changed files with 99 additions and 4 deletions

View File

@@ -3,9 +3,12 @@
from strings import * from strings import *
from tree import * from tree import *
def main(): def trees():
t = build_tree((1,
t = build_tree((1, (2, (3, None, None), None), (4, None, None))) (2,
(3, None, None),
None),
(4, None, None)))
print(t) print(t)
@@ -14,6 +17,64 @@ def main():
assert t.left.left.val == 3 assert t.left.left.val == 3
assert t.right.val == 4 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 pass
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -11,7 +11,7 @@ class Tree:
def __print_leaf(self, leaf): def __print_leaf(self, leaf):
if leaf: if leaf:
return f"{leaf}" return f"{leaf}"
return "<empty>" return "_"
def is_leaf(self): def is_leaf(self):
return self.left == None and self.right == None return self.left == None and self.right == None
@@ -32,3 +32,37 @@ def build_tree(args):
raise RuntimeError("Nodes must be tuples") raise RuntimeError("Nodes must be tuples")
return Tree(value, build_tree(right), build_tree(left)) 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)