<p>如果我理解的很好,你只是要求一个没有任何中间节点的直接父子关系。
如果这不是你要找的,那么请提供另一个例子,说明下面的代码失败,我可以修复它。你知道吗</p>
<p>代码使用anytree,因为这是您建议的库</p>
<pre><code>from anytree import Node, RenderTree
nodes = {} # a dict as a lookup to find nodes by name
def add_node(val, parentval=None):
if parentval is not None:
node = nodes[val] = Node(val, parent=nodes[parentval])
else:
node = nodes[val] = Node(val)
return node
def mk_tree():
top = add_node("1")
add_node("2", "1")
add_node("2.1", "2")
add_node("3", "2.1")
add_node("2.2", "2")
add_node("2.2.1", "2.2")
add_node("3", "2.2.1")
return top
def is_child_or_parent(n1, n2):
return n1.parent == n2 or n2.parent == n1
testpatterns = [
("3", "1", False),
("3", "2", False),
("2.2.1", "2.2", True),
("2.2.1", "3", True),
]
def run_test():
for name1, name2, expected in testpatterns:
node1 = nodes[name1]
node2 = nodes[name2]
rslt = is_child_or_parent(node1, node2)
print(node1, node2, expected, rslt)
assert rslt == expected
tree = mk_tree()
print(RenderTree(tree))
run_test()
</code></pre>