获取子节点未连接到根节点

时间:2018-04-09 10:35:29

标签: neo4j cypher

enter image description here我有一个破坏的二叉树,必须通过确保可以跟踪所有的childNodes或从rootNode获取它们的源来修复它。所以对于所有的childNodes,我想得到它们的根(通常应该是id:0)

用于获取二叉树中每个节点的代码。

FOREACH nodes
CHECK RELATIONSHIP IF ROOT PARENT ID NOT 0

ID 7与根节点分离,如何运行检查以了解7,9和10是否与根节点断开连接。

1 个答案:

答案 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

这只会让您受到循环影响的节点,在这种情况下,您可能需要在层次结构中进一步查找以查找错误关系。