我使用下面的cypher查询从neo4j数据库中提取节点和关系:
match p=(:Root) <-[:linkedTo]- ()
unwind nodes(p) as n unwind rels(p) as r
return {nodes: collect(distinct n), links: collect(distinct {source: id(endNode(r)), target: id(startNode(r))})}
我将查询结果转换为节点和链接的数组,如下所示:
var obj = JSON.parse(xmlhttp.responseText);
var json = obj.data[0][0];
// Extract node list from neo4j/json data
var nodes = [];
for (n in json.nodes) {
var nodeObj = json.nodes[n];
var node = nodeObj.data;
node.id = nodeObj.metadata.id;
node.type = nodeObj.metadata.labels[0];
nodes.push(node);
}
// Create a node map
var nodeMap = {};
nodes.forEach(function(x) { nodeMap['_'+x.id] = x; nodeMap['_'+x.id].children = []; });
// Extract link list from neo4j/json data
var links = json.links.map(function(x) {
nodeMap['_'+x.source].children.push(nodeMap['_'+x.target]);
return { source: nodeMap['_'+x.source], target: nodeMap['_'+x.target] };
});
如何从节点和链接生成d3中的树?安慰log()表明节点和链接数组都具有正确的格式,每个节点还包含其子节点的列表。
如上所述,节点和子级的数据结构是正确的。缺少的部分是根节点。因此,我更改了 cypher 查询来标识根节点,该节点在我的图形中追加以命名为 root,如下所示:
match p=(:Panel) <-[:belongsTo]- (), (root:Panel {Name: "root"})
unwind nodes(p) as n unwind rels(p) as r
return {root: id(root), nodes: collect(distinct n), links: collect(distinct {source: id(endNode(r)), target: id(startNode(r))})}
因此,按照中的建议声明树http://bl.ocks.org/d3noob/8324872:
var tree = d3.layout.tree()
.size([360, radius - 120]);
var diagonal = d3.svg.diagonal.radial()
.projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
var vis = d3.select("#chart").append("svg")
.attr("width", radius * 2)
.attr("height", radius * 2 - 150)
.append("g")
.attr("transform", "translate(" + radius + "," + radius + ")");
// Compute the new tree layout starting with root
var root = nodeMap['_'+json.root];
var nodes = tree.nodes(root).reverse(), links = tree.links(nodes);
...
总而言之,诀窍是以JSON格式报告neo4j中的root,节点和链接,然后构建节点数组,节点映射并根据链接将子节点分配给节点映射中的节点。
我目前正在尝试使用C语言中的单链表。我编写了一个函数来创建一个节点,并编写了一个函数来打印所有节点-看起来如下: 输出正确: 现在我想写一个函数,用于创建一个新的节点,我把我的代码改成这样: 编译后,我首先得到这个警告消息: 输出如下所示: 它只显示节点,我猜指向(例如
以下代码删除双链接列表中的第一个节点。 如果列表只包含1个元素,我们将last的引用设置为null。我的问题是,我们为什么不将first的引用设置为null?这会有什么不同吗?
但它没有提供所需的产出。它给出的输出像 我是XSL的新手。有谁能帮我解决这个问题吗?
我有麻烦删除双向链表中的节点,程序崩溃,我不能解决这个问题。你能帮我吗?这是创建新节点,查看它们并删除它们的完整代码。 我认为这个问题与Node del的scanf()有关,但我不确定。当我只是通过或
给定单链接列表:
问题内容: 我正在练习使用链表节点,遇到了一个我不知道如何回答的问题。如何删除链接列表中的最后一个节点。下面的代码适用于所有条目的最后一个节点。最后一个不会被删除。 节点类别 主要 问题答案: 我想您的最后一个元素失败了。最后一个元素将没有元素。因此,不会将最后一个元素与传递的字符串进行比较。您应该使用调试器进行跟踪。