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 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__":
|
||||||
|
|||||||
36
src/tree.py
36
src/tree.py
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user