问题标签 [treepath]

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 投票
1 回答
233 浏览

java - 支持具有相同子节点的 JTree 节点

我已经实现了一个 TreeModel 来适应现有的数据模型以作为 JTree 进行可视化。我遇到了具有多个相同子(叶)节点的节点的问题。例如,考虑一个带有叶节点的 JTree,这些叶节点是字符串。只要父节点包含具有相同字符串值的子节点,就会出现问题。这些叶节点的 TreePath 是相同的,并且作为字符串,equals() 返回 true。该文档明确指出了这一点:

JTree 及其相关类广泛使用 TreePaths 来识别 TreeModel 中的节点。如果 TreeModel 返回相同的对象,通过 equals 进行比较,则在同一父级下的两个不同索引处,生成的 TreePath 对象也将被视为相等。一些实现可能假设如果两个 TreePath 相等,则它们标识相同的节点。如果不满足此条件,可能会导致绘画问题和其他奇怪现象。换句话说,如果给定父级的 getChild 返回相同的 Object(由 equals 确定)可能会导致问题,建议您避免这样做。

有没有解决的办法?到目前为止,我唯一想到的(理论上 - 我还没有实现并验证它是否可以工作)是将 String 包装在另一个类中,覆盖 toString() 以返回包装的字符串,并利用默认的 equals() 方法测试实际的包装对象必须相同(相同的实例)才能返回 true。这似乎是一个可怕的黑客攻击。任何人?

编辑:我最终使用了建议的方法。我需要为我的应用程序支持相同字符串的多个实例作为同一父级的子级,但没有找到其他解决方法。它有效,但是...

0 投票
1 回答
93 浏览

eclipse - 何时调用 filter(Viewer,TreePath,Object[]) 方法?

我已经为我的TreeViewer对象创建并添加了一个新过滤器。它工作正常,但我似乎无法理解何时被filter(Viewer,TreePath,Object[])调用。

所以过滤器实际上是一个类的实例,它扩展ViewerFilter并需要实现抽象方法select。在我的例子中,select 总是返回 true,我通过覆盖public Object[] filter(Viewer viewer, Object parent, Object[] elements).

但是,当我尝试覆盖时public Object[] filter(Viewer viewer, TreePath parentPath, Object[] elements),根本不会调用此函数。

这是它的外观:

我需要使用TreePath参数覆盖过滤器方法,以便能够根据指定级别过滤元素。

在文档中我只能找到以下解释:

过滤给定查看器的给定元素。输入数组未修改。此方法的默认实现使用路径中的父级调用 filter(Viewer, Object, Object[])。子类可以覆盖

稍后编辑

最后我找不到任何调用这个函数的方法,所以我实现了一个解决方法:我在我的模型实例上创建了一个包装器,它也有一个“父”字段。每当我将实例插入树中(在我的getChildrengetElements方法中)时,我实际上都会创建包装器的实例并相应地设置父级。

这样,无论何时hasChildren调用,我都可以从当前节点导航到根。

0 投票
1 回答
568 浏览

python - 计算从根到叶的所有路径的所有节点

如果给定一棵树,其节点的整数为:1 ~ 10,并且所有节点的分支因子为 3,我如何编写一个函数来遍历从根到叶子的每条路径的树

所以对于这个例子,假设它需要返回这个:

我试过这个辅助功能:

这段代码有太多错误。一方面,它会在返回列表中的遍历中留下每个访问节点的印记——因此很难确定哪些是我需要从该列表中获取的值。另一方面,如果树很大,则在到达“for i in t.children”行之前,它不会在路径中留下根和较早节点的印记。它首先需要:从根叶复制所有路径;第二:返回一个列表,专门用于每个路径计数的最终数量。

请帮忙!这太难了。

0 投票
1 回答
103 浏览

java - JTree 节点编辑路径比较始终为真

我已经在文件服务器程序上工作了一段时间,到目前为止,我已经能够避免在这里发布一些东西来寻求帮助。但我在我的问题上找不到任何东西,我很困惑。

我添加了一个弹出菜单,其中包含创建新顶级文件夹的选项,它实际上只是创建一个节点,并在其编辑后将其名称发送到服务器以创建文件夹。虽然我的所有编辑工作正常并且上传工作正常,但我遇到了问题。

我在创建文件夹时将 JTree 更改为可编辑,并且持续循环直到该节点不是正在编辑的节点,此时它从 JTree 中删除了可编辑性。

不幸的是,while 检查tree.getEditingPath().equals(nfPath)总是返回true,因此它仍然是可编辑的。

但我不明白为什么它仍然是正确的,它显然不应该。如果它有助于/改变任何东西,它会在一个单独的线程中运行(否则 while 循环会阻止 GUI 呈现)

那么我应该/我能做什么,有没有更好的方法来做到这一点,或者至少有一个可行的方法?

更新:

虽然我还没有找到解决上述明确问题的方法,但如果我改为测试tree.isPathSelected(nfPath)That 工作正常并且树随后设置为不可编辑!

0 投票
1 回答
199 浏览

java - JTree 正在显示应可扩展为叶节点的节点

我有这个项目,我的程序从操作系统磁盘映像中获取文件并将它们的详细信息存储在数据库中,另一个功能从数据库中获取文件并将它们存储在列表(我自己的对象类型)中,并且应该创建一个 JTree在获取它们的路径(也存储在数据库中)并根据斜杠拆分路径字符串之后,以便各个文件夹中的文件是叶节点,文件夹是父节点。文件的获取工作完美,但我认为创建 JTree 有问题,因为某些文件夹在 JTree 中显示为叶节点。这是一个屏幕截图:

你可以看到 /home 和 /usr 文件夹是终端节点

让我告诉你我的代码是什么样的:

}

我有一个实现 TreeModel 的 TreePathsTreeModel 类:

据我从 TreePathsTreeModel 构造函数中的打印语句可以看出,列表的格式正确。我将在下面粘贴输出示例:

也许我的鼻子底下有些东西我错过了。这也可能是一个愚蠢的错误。有任何想法吗?这是我大学最后一年的项目,请帮忙!

0 投票
1 回答
3255 浏览

java - 如何以编程方式在 jTree 子项上设置选择

我已经阅读了一堆已经提出的问题,但还没有看到一个可靠的答案。我正在尝试在 jTree 上设置选择,以尝试为我的 Java 项目创建一种 API。我可以很容易地在父节点上设置选择:myTree.setSelection(1);

有任何叶子离开子节点的问题。我有一个 walk 函数,我正在其中寻找一个特定的字符串。当我到达带有我正在寻找的字符串的节点时,我设法返回了一个 Object[]。但我无法将其转换为 Treepath 以使用 myTree.setSelectionPath(path)。有人可以帮忙吗?我很感激。

0 投票
0 回答
229 浏览

python - 如何从 sklearn 决策树中收集所有路径?

我正在尝试从 skealrn 中的决策树生成所有路径。这里estimator来自随机森林,它是 sklearn 中的决策树。但是我对 sklearn 决策树的数据结构感到困惑。似乎left,right这里包含所有左节点。

当我试图打印出路径时,它工作正常。

但是我需要收集一个列表中的所有路径,如果叶子节点是“正常”,也不记录路径,所以我尝试了下面的代码:

它返回一个超级巨大的结果,没有足够的内存来加载,我很确定这里的代码有问题,因为所有需要的路径都不应该那么大。我也尝试过这里的方法:Getting decision path to a node in sklearn,但 sklearn 树结构的输出只会让我更加困惑。

你知道如何解决这里的问题吗?

0 投票
3 回答
389 浏览

algorithm - 在插入过程中逐步存储从根节点到多路树节点的路径,使得存储操作没有O(n)的复杂度

我想问一下是否有人知道在插入新节点期间存储从根节点到多路树的新节点的路径的高效方法。例如,如果我有以下树:

多路树

对于每个节点,我目前在插入过程中存储一个从根节点到节点的路径数组,方法是通过int为相同深度的每个子节点分配一个唯一的 ID:

如果我现在从深度 3 的叶节点插入一个新节点1,我将必须为其创建一个新的路径数组,以存储父节点的所有节点1(即[1, 1, 3, 1])加上新的子 ID,该 ID1用于第一个子节点:

由于我的树在高度上增长了很多(每个深度的孩子数量相对较少,但深度可以很高),该算法的缓慢部分将是这个数组重新创建过程。想象一下深度树1.000.000,如果我从深度节点插入一个新节点1.000.000,我必须为这个新节点创建一个新数组,存储1.000.001父节点的所有 ID 并附加新节点的 ID:

在节点插入期间是否有更有效的方法来存储每个节点上的路径?

我基本上需要这个来确定任何给定的节点是否是树中可能的父节点的子节点,并且由于我将路径存储在每个节点中,我可以通过检查子节点的路径数组轻松做到这一点,如下所示:

这种查找操作会很快,问题是随着树的深入而创建路径数组。

任何建议,将不胜感激。

感谢您的关注。

0 投票
2 回答
135 浏览

javascript - Javascript - 遍历一棵树以生成节点的序列

我发现很少有与此相关的 SO 问题,但没有一个是基于我要解决的确切问题。

基本上,我正在研究一个树结构,每个节点都分配有一个 id。

目标是生成一个序列字符串,该字符串将提供一个路径来顺序遍历整个树。

例如下图的输出应该是123242523637321


在此处输入图像描述


如您所见,树从节点 1 开始,然后到达节点 2。

节点 2 连接到其他 3 个节点,即。节点 3、节点 4 和节点 5。

按照顺序,下一个节点是 3。

要转到下一个节点,即节点 4,我们必须回到节点 2,然后再转到节点 4,因此字符串变为12324

一旦我们得到最后一个节点,即节点 7,我们将返回第一个节点,因此字符串以子字符串7321结尾

我正在尝试构建一个逻辑,该逻辑将从给定的树结构生成字符串。

上图的示例树结构是 -



如您所见,每个节点都有一个名为 connectedNodes 的属性,它可以帮助我们遍历树。


编辑 - 正如评论中指出的那样,属性connectedNodes以前称为 children)存储连接节点的 id。提供的对象并不代表树,我们只需要使用这个对象从头到尾遍历,在这个例子中就是从id 1到7。


如果我遗漏了什么或需要更多信息,请告诉我。

谢谢!