mirror of
https://github.com/iritmaximus/tira.git
synced 2026-10-12 19:13:47 +03:00
122 lines
3.1 KiB
Python
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
|