This assumes that the entries are in such an order that a parent node was  always introduced as a child of another node beforehand (root excluded).
With that in mind, we can then iterate over the lines, split them (I used split, regex would work too) and create the new nodes.
For how to get a reference to the parent by name, I came up with two solutions:
First, find the parent by name using anytrees find_by_attr
from anytree import Node, RenderTree, find_by_attr
with open('input.txt', 'r') as f:
    lines = f.readlines()[1:]
    root = Node(lines[0].split(" ")[0])
    for line in lines:
        line = line.split(" ")
        Node("".join(line[1:]).strip(), parent=find_by_attr(root, line[0]))
    for pre, _, node in RenderTree(root):
        print("%s%s" % (pre, node.name))
Second, just cache them in a dict while we create them:
from anytree import Node, RenderTree, find_by_attr
with open('input.txt', 'r') as f:
    lines = f.readlines()[1:]
    root = Node(lines[0].split(" ")[0])
    nodes = {}
    nodes[root.name] = root
    for line in lines:
        line = line.split(" ")
        name = "".join(line[1:]).strip()
        nodes[name] = Node(name, parent=nodes[line[0]])
    for pre, _, node in RenderTree(root):
        print("%s%s" % (pre, node.name))
input.txt
Parent Child
A      A1
A      A2
A2     A21
Output:
A
├── A1
└── A2
    └── A21