3
3
4
4
from __future__ import annotations
5
5
6
- import queue
6
+ from queue import Queue
7
7
8
8
9
9
def swap (a : int , b : int ) -> tuple [int , int ]:
@@ -37,7 +37,7 @@ def create_sparse(max_node: int, parent: list[list[int]]) -> list[list[int]]:
37
37
# returns lca of node u,v
38
38
def lowest_common_ancestor (
39
39
u : int , v : int , level : list [int ], parent : list [list [int ]]
40
- ) -> list [ list [ int ]] :
40
+ ) -> int :
41
41
# u must be deeper in the tree than v
42
42
if level [u ] < level [v ]:
43
43
u , v = swap (u , v )
@@ -50,7 +50,7 @@ def lowest_common_ancestor(
50
50
return u
51
51
# moving both nodes upwards till lca in found
52
52
for i in range (18 , - 1 , - 1 ):
53
- if parent [i ][u ] != 0 and parent [ i ][ u ] != parent [i ][v ]:
53
+ if parent [i ][u ] not in [ 0 , parent [i ][v ] ]:
54
54
u , v = parent [i ][u ], parent [i ][v ]
55
55
# returning longest common ancestor of u,v
56
56
return parent [0 ][u ]
@@ -61,16 +61,16 @@ def breadth_first_search(
61
61
level : list [int ],
62
62
parent : list [list [int ]],
63
63
max_node : int ,
64
- graph : dict [int , int ],
65
- root = 1 ,
64
+ graph : dict [int , list [ int ] ],
65
+ root : int = 1 ,
66
66
) -> tuple [list [int ], list [list [int ]]]:
67
67
"""
68
68
sets every nodes direct parent
69
69
parent of root node is set to 0
70
70
calculates depth of each node from root node
71
71
"""
72
72
level [root ] = 0
73
- q = queue . Queue (maxsize = max_node )
73
+ q : Queue [ int ] = Queue (maxsize = max_node )
74
74
q .put (root )
75
75
while q .qsize () != 0 :
76
76
u = q .get ()
@@ -88,7 +88,7 @@ def main() -> None:
88
88
parent = [[0 for _ in range (max_node + 10 )] for _ in range (20 )]
89
89
# initializing with -1 which means every node is unvisited
90
90
level = [- 1 for _ in range (max_node + 10 )]
91
- graph = {
91
+ graph : dict [ int , list [ int ]] = {
92
92
1 : [2 , 3 , 4 ],
93
93
2 : [5 ],
94
94
3 : [6 , 7 ],
0 commit comments