On the same path On the same path
Simple
English RU

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]
basic #1
on_same_path(
    (1, [(2, [(4, []),
              (5, [(7, []),
                   (8, []),
                   (9, [])])]),
         (3, [(6, [])])]),
    [(1, 5), (2, 9), (2, 6)],
) == [True, True, False]
basic #2
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]
basic #3

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