Not quite recursive, but you could iterate through each child, look it up, and remove all of its children from the current node:
def get_adjacency(graph):
graph = {node: set(children) for node, children in graph.items()}
for node, children in graph.items():
for child in children:
children = children - graph[child]
graph[node] = children
return {node: list(children) for node, children in graph.items()}
c = {
'a': ['b','c','d','e'],
'b': ['d'],
'c': ['d','e'],
'd': [],
'e': [],
'f': ['i','j','c','e','d'],
'i': ['c','e','d'],
'j': ['e']
}
print get_adjacency(c)