使用 Gremlin 遍历树的叶子时查找每个节点的子节点

Finding the children of each and every node while traversing upto the leaves of the tree using Gremlin

假设我有一棵像

这样的树

现在盯着顶点8,我想找到顶点8的子节点,即{3,10},将它们存储在map中并再次对剩余的顶点继续相同的过程,直到我到达叶节点(编写查询时树的高度未知)。

我想编写一个将执行上述操作的查询,并且应该 return 一个 Iterator 包含这些 maps。 请帮我写这个查询。

您可以考虑 tree 步骤:

gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> t=new Tree();g.v(1).out.tree(t).loop(2){true}
gremlin> t
==>v[1]={v[2]={}, v[3]={}, v[4]={}}
==>v[4]={v[3]={}, v[5]={}}

我没有完全按照您问题的预期格式部分进行操作,因此我不确定以上内容是否完全符合您的要求。您可能会根据需要使用一些 groovy 从那里转换 t,因为它可以立即完成大部分工作。

在 GremlinPipeLine 中执行相同的查询

Tree tree = new Tree();
    new GremlinPipeline(graph).V().has("mgrNo", 814754).out("manager of").tree(tree).loop(2, new PipeFunction<LoopBundle,Boolean>() {

        @Override
        public Boolean compute(LoopBundle loopBundle) {
            return true;
        }
    }).iterate();
Iterator it = tree.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());

       }
    }