On the same path
You have to write a function that receives a tree – potentially large but finite –
and a list of pairs of tree's nodes.
For each pair, you must determine if the two nodes are on a same path (True) in the tree or not (False),
then return an iterable/list of these booleans.
Input: two arguments:
- a tree as a tuple (a node, list of sub-trees)
- a list of pairs (the tuples of two nodes)
Output: An iterable/list of booleans.
Example:
on_same_path(
('Me', [('Daddy', [('Grandpa', []),
('Grandma', [])]),
('Mom', [('Granny', []),
('?', [])])]),
[('Grandpa', 'Me'), ('Daddy', 'Granny')],
) == [True, False]
on_same_path(
(1, [(2, [(4, []),
(5, [(7, []),
(8, []),
(9, [])])]),
(3, [(6, [])])]),
[(1, 5), (2, 9), (2, 6)],
) == [True, True, False]
on_same_path(
(0, [(1, [(2, []),
(3, [])]),
(4, [(5, []),
(6, [])]),
(7, [(8, []),
(9, [])])]),
[(4, 2), (0, 5), (2, 3), (9, 2), (6, 4), (7, 8), (8, 1)],
) == [False, True, False, False, True, True, False]
Preconditions:
- the tree is finite and has less than 1000 nodes
- for each given tree all nodes are either the integers or strings
- len(pairs) ≤ 32