我有一个破坏的二叉树,必须通过确保可以跟踪所有的childNodes或从rootNode获取它们的源来修复它。所以对于所有的childNodes,我想得到它们的根(通常应该是id:0)
用于获取二叉树中每个节点的代码。
FOREACH nodes
CHECK RELATIONSHIP IF ROOT PARENT ID NOT 0
ID 7与根节点分离,如何运行检查以了解7,9和10是否与根节点断开连接。
答案 0 :(得分:1)
根据具体情况,在根节点上匹配可能会更快,根节点不应该有传入:PARENT_OF关系:
MATCH (root:Tree{id:0})
MATCH (falseRoot:Tree)
WHERE size((falseRoot)<-[:PARENT_OF]-()) = 0 and root <> falseRoot
RETURN falseRoot
从那里,您可以找到连接到断开连接的假根节点的其他节点。
但是,如果您的树有可能以引入循环的方式被破坏,则上述查询可能无法检测到它。此查询应该能够:
MATCH (n:Tree)
WHERE (n)<-[:PARENT_OF*]-(n)
RETURN n
这只会让您受到循环影响的节点,在这种情况下,您可能需要在层次结构中进一步查找以查找错误关系。