问题标签 [ordered-tree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
neo4j - 使用 neo4j 建模有序树
我刚刚开始使用 neo4j,并且我了解图形和关系的原理,但是对于我想要建模的某些结构,我遇到了一些麻烦。我想在编程语言项目中使用它,并存储已解析源文件的 AST。从那里开始,我计划向节点添加大量额外的数据和关系以帮助分析和工具,但基本的 AST 仍然有点困难。
制作树的天真方法是简单地遍历 AST 并将树中的每个节点复制到 neo4j 中的节点,使用属性来跟踪令牌数据等,然后使用 CHILD 关系指向子节点. 问题是,当我以后想要遍历树时,我需要能够以原始 AST 的正确顺序进行,但开箱即用我不太确定最好的方法。
我想到了两种基本方法。一种是只为每个 CHILD 关系添加一个索引/序数属性。另一种是与第一个孩子建立 FIRST 关系,在每个孩子之间建立 NEXT 关系以维持秩序。
对于这两种方法中的任何一种,似乎仍然没有任何开箱即用的东西可以用来以正确的顺序遍历它。我认为如果我执行 FIRST/NEXT,只要我强制 neo4j 始终先遍历 FIRST 并进行深度优先搜索,我就可以获得正确的顺序。那行得通吗?有没有更好的办法?这似乎是开箱即用的事情。
更新
最终我决定使用我的两个想法。子节点与索引属性具有 CHILD 关系。第一个孩子也有 FIRST_CHILD 关系。兄弟节点具有 NEXT_SIBLING 关系以给出正确的排序。之后,遍历就很简单了:
然后当我真的需要走树的时候,我可以做
对于我的用例,我实际上并没有在创建后修改树结构本身——我只是执行分析并添加更多的关系和属性,所以这很容易维护。如果我必须做更多的修改,可能会做一些工作,特别是如果我想维护子关系的索引号。因此,对于处于类似情况的其他人来说,这可能是需要考虑的事情。
如果我确实遇到了更易变的东西,我可能会尝试 Peter Neubauer 建议的集合,并且可能只是创建一个 OrderedTreeNode 类,指向一个节点并为子级使用 List 集合。
algorithm - 给定一个任意排序的树,我如何找到任意一组元素的第一个和最后一个元素?
我有一棵树,由 TreeItems 构成。每个 TreeItem 都有以下方法:
我也有来自这棵树的一组无序的 TreeItems。我想快速找到这个集合的第一个元素和最后一个元素。
有什么聪明的主意吗?
java - 树的构建和中序遍历:> 2 个儿子
我需要从 Access 数据库中读取成员列表。每个成员都由另一个成员赞助。每条记录都包含其发起人的 ID 和他们自己的 ID。我现在必须能够有效地阅读会员名册并将其打印出来,以显示谁是由谁赞助的。
我觉得最有效的方法是构建一棵树,然后进行中序遍历。
我的输出应该是这样的:
订单将通过 ID 号。我找到的一切都是为了一棵只有左右儿子的二叉树。如您所见,这对我不起作用。
首选的解决方案是 Java,但我会感激我能得到的任何东西。
邦妮
c++ - 在有序树的二叉树表示中计算节点的右子节点
我需要帮助解决这个问题。示例树:
我有一个表示有序树的二叉树,我必须计算每个节点的子节点数并将该数字放在相应的节点中。
A有三个孩子(B,C,D),D有三个(E,F,G)。B,C,E,F,G有零个孩子。
每个节点只能有两个物理(二进制)表示的子节点。如果一个节点有一个左孩子,那么从这个节点开始的每个右孩子也被认为是一个孩子。在我的示例中,A 左孩子是 B。B 有一个右孩子 C。C 有一个右孩子 D。所以 B、C 和 D 是此任务中 A 的孩子。
在程序结束时,节点中的数据应为 A(3),B(0),C(0),D(3),E(0),F(0),G(0)。
algorithm - 具有 3 个节点的有序树的总数
我在互联网上得到了不同的答案
- https://in.answers.yahoo.com/question/index?qid=20100508110438AAbKyMj
- http://wiki.answers.com/Q/How_many_ordered_trees_are_possible_with_3_nodes?#slide=2
我也在SO看到了一个问题,但对我没有多大帮助
答案应该是什么?
这也是树吗?
/li>
c - 打印二叉树 asc/desc 限制 C 中的节点数
我在限制从二叉树打印的节点数量时遇到了一些麻烦。我有当前的代码:
abp.h
abp.c
主程序
第一个想法是static int x = 0;
在centralEsquerda()
和增量中放入一些,但由于第二个递归调用(centralEsquerda(a->dir, lim)
),它不能正常工作。下面测试的代码:
BTree 已经像每个 BTree 一样有序,左下,右下。为了以 asc 顺序打印,我使用了函数centralEsquerda()
,并以我使用的 desc 顺序打印,centralDireita()
它只是反转递归调用,它首先调用正确的节点(a->dir
)。
因此,使用上面的代码,将打印 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20 和我希望使用centralEsquerda(node, 5)
它应该打印 1、2、3、4、5。
有任何想法吗?附言。不想使用队列/列表
[更新]
用下面的代码解决了,但我不满意......
c - 确定树是否有序的函数(即 BST)
我有这些函数来确定二叉树是否有序。
(假设我们已经实现了treemanagement.c,我已经对其进行了修改以托管整数而不是字符串)
问题是这不适用于完美的树(所有节点都有两个孩子,因为在我的代码中没有在完美树的情况下进行值检查!)。
例如,这棵无序树将被评估为有序树!
更大的问题是这来自测试,我不得不使用这个“代码”并填写 GAP。
有什么指导吗?
neo4j - Neo4j 有序树
我们正在使用层次结构树结构,其中父级有零个或多个子级,而一个子级有一个或零个父级。当我们查询给定父级的直接子级列表时,查询会以随机顺序返回子级。我们需要孩子按照我们在创建或更新孩子时定义的顺序返回。
我在孩子之间添加了关系 -[:Sibling]-> 所以“顶部”兄弟只有一个传入的 :Sibling 关系,而“底部”兄弟只有一个传出关系。
鉴于此,是否有一个 Cypher 查询以兄弟顺序返回子级?
我有一个返回每个孩子及其兄弟的查询,但现在我必须编写一些代码以正确的顺序返回列表。
另一种方法可能是为每个子节点添加一个排序号。如果其中一个孩子更改顺序,则需要为所有孩子更新。这种方法似乎对图形数据库概念有点陌生。
如果以前遇到过这个问题,是否有标准的算法来以编程方式解决它?
更新1
布鲁诺要求的样本数据
(parent1)
(child1)-[:ChildOf]->(parent1)
(child2)-[:ChildOf]->(parent1) (child2)-[:Sibling]->(child1)
(child3)-[:ChildOf]->(parent1) (child3)-[:Sibling]->(child2)
是否有密码查询以该顺序返回 child1、child2、child3?
如果不是,则可以通过编程方式进行排序
使用属性而不是关系
(parent1)
(child1)-[:ChildOf]->(parent1) (child1:{order:1})
(child2)-[:ChildOf]->(parent1) (child2:{order:2})
(child3)-[:ChildOf]->(parent1) (child3:{order:3})
我不希望有一个可以更新孩子顺序的密码查询。
更新2
我现在已经到达以下查询,它以正确的顺序返回子项
此查询依赖于添加 -[:FirstChildOf]->(parent) 关系。
如果我没有听到,否则我会将其设置为答案。
我应该假设没有用于将节点插入有序列表的密码查询吗?