generated from nullndr/pyproj
chore: add some operations
This commit is contained in:
67
src/main.py
67
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__":
|
||||
|
||||
36
src/tree.py
36
src/tree.py
@@ -11,7 +11,7 @@ class Tree:
|
||||
def __print_leaf(self, leaf):
|
||||
if leaf:
|
||||
return f"{leaf}"
|
||||
return "<empty>"
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user