问题标签 [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.

0 投票
2 回答
1911 浏览

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 集合。

0 投票
1 回答
58 浏览

algorithm - 给定一个任意排序的树,我如何找到任意一组元素的第一个和最后一个元素?

我有一棵树,由 TreeItems 构成。每个 TreeItem 都有以下方法:

我也有来自这棵树的一组无序的 TreeItems。我想快速找到这个集合的第一个元素和最后一个元素。

有什么聪明的主意吗?

0 投票
1 回答
78 浏览

java - 树的构建和中序遍历:> 2 个儿子

我需要从 Access 数据库中读取成员列表。每个成员都由另一个成员赞助。每条记录都包含其发起人的 ID 和他们自己的 ID。我现在必须能够有效地阅读会员名册并将其打印出来,以显示谁是由谁赞助的。

我觉得最有效的方法是构建一棵树,然后进行中序遍历。

我的输出应该是这样的:

订单将通过 ID 号。我找到的一切都是为了一棵只有左右儿子的二叉树。如您所见,这对我不起作用。

首选的解决方案是 Java,但我会感激我能得到的任何东西。

邦妮

0 投票
1 回答
953 浏览

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)。

0 投票
2 回答
17650 浏览

algorithm - 具有 3 个节点的有序树的总数

我在互联网上得到了不同的答案

  1. https://in.answers.yahoo.com/question/index?qid=20100508110438AAbKyMj
  2. http://wiki.answers.com/Q/How_many_ordered_trees_are_possible_with_3_nodes?#slide=2

我也在SO看到了一个问题,但对我没有多大帮助

答案应该是什么?

  • 这也是树吗?

    /li>
0 投票
1 回答
163 浏览

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。

有任何想法吗?附言。不想使用队列/列表

[更新]

用下面的代码解决了,但我不满意......

0 投票
1 回答
128 浏览

c - 确定树是否有序的函数(即 BST)

我有这些函数来确定二叉树是否有序。

(假设我们已经实现了treemanagement.c,我已经对其进行了修改以托管整数而不是字符串)

问题是这不适用于完美的树(所有节点都有两个孩子,因为在我的代码中没有在完美树的情况下进行值检查!)。

例如,这棵无序树将被评估为有序树!

更大的问题是这来自测试,我不得不使用这个“代码”并填写 GAP。

有什么指导吗?

0 投票
3 回答
578 浏览

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) 关系。

如果我没有听到,否则我会将其设置为答案。

我应该假设没有用于将节点插入有序列表的密码查询吗?