def get_descendant_by_address(tree_node, relative_address):
    """
    Get the descendant node with given address relative to the given tree node.

    A relative address with respect to a tree node is a list of successive children to traverse to reach the desired
    descendant. For example:

    [0] is the address of the first child of the given tree node.
    [1, 2] is the address of the third child of the second child of the given tree node.

    :param tree_node: Tree node whose descendant we want to get.
    :param relative_address: Relative address to the descendant we want to get.
    :type relative_address: List[int]
    """
    if len(relative_address) == 0:
        return tree_node
    return get_descendant_by_address(tree_node.children[relative_address[0]], relative_address[1:])