Files
tira/viikko6/samelevel.py
T
2023-11-07 01:27:43 +02:00

122 lines
3.1 KiB
Python

from collections import namedtuple
def count(node, level):
leaf_counter = 0
# print()
# print(node, level)
if level == 1:
# print("only 1 depth, returned 1")
return 1
elif level == 0:
# print("no depth, no nodes counted")
return 0
level -= 1
# print(
# "left:",
# node[0] is not None,
# "right:",
# node[1] is not None,
# " --- on level:",
# level,
# " - while leaf:",
# leaf_counter,
# )
if node[0] is not None:
leaf_counter += count_rec(node[0], level, 0)
# print("got", leaf_counter, "from left")
if node[1] is not None:
leaf_counter += count_rec(node[1], level, 0)
# print("got", leaf_counter, "from right")
return leaf_counter
def count_rec(node, level, leaf_counter):
level -= 1
current_leaf_counter = leaf_counter
if level < 0:
return 0
elif level == 0:
# print("incd leaf", leaf_counter + 1)
return 1
# print(
# "left:",
# node[0] is not None,
# "right:",
# node[1] is not None,
# " --- on level:",
# level,
# " - while leaf:",
# leaf_counter,
# )
if node[0] is not None:
leaf_counter += count_rec(node[0], level, current_leaf_counter)
# print(node[0], " --- left --- level:", level, "leaf counter:", leaf_counter)
if node[1] is not None:
leaf_counter += count_rec(node[1], level, current_leaf_counter)
# print(node[1], " --- right --- level:", level, "leaf counter:", leaf_counter)
return leaf_counter
if __name__ == "__main__":
Node = namedtuple("Node", ["left", "right"])
tree = Node(None, Node(Node(None, None), Node(None, None)))
tree2 = Node(left=None, right=None)
print(count(tree, 1)) # 1
print(count(tree, 2)) # 1
print(count(tree, 3)) # 2
print(count(tree, 4)) # 0
print(count(tree, 0)) # 0
print(count(tree2, 1)) # 1
print(
count(
Node(
left=Node(
left=Node(
left=Node(left=Node(left=None, right=None), right=None),
right=None,
),
right=None,
),
right=Node(
left=Node(
left=Node(
left=Node(left=Node(left=None, right=None), right=None),
right=None,
),
right=None,
),
right=None,
),
),
3,
)
)
# 2
print(
count(
Node(
left=Node(
left=Node(left=Node(left=None, right=None), right=None),
right=Node(
left=Node(left=None, right=None),
right=Node(left=Node(left=None, right=None), right=None),
),
),
right=Node(left=None, right=Node(left=None, right=None)),
),
4,
)
)
# 3