问题标签 [tree-structure]

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 投票
8 回答
56307 浏览

sql-server - 如何在数据库中存储目录/层次/树结构?

如何在数据库中存储目录/层次结构/树结构?即 MSSQL 服务器。

@olavk:看起来您没有看到我自己的答案。我使用的方式比递归查询更好:)

pps这就是要走的路!

0 投票
4 回答
374 浏览

filesystems - 持久性:存储为目录树的数据树

我想知道将内存树结构存储为目录树以实现持久性的实用性。在我的情况下,他的目标文件系统将是 ZFS,一旦创建了结构,它将不经常被多个进程访问。

使用目录树作为数据树的持久性机制的性能如何?

0 投票
11 回答
31129 浏览

sql - 针对树结构的优化 SQL

如何从性能最佳的数据库中获取树状结构数据?例如,假设您在数据库中有一个文件夹层次结构。其中 folder-database-row 有IDNameParentID列。

你会使用一种特殊的算法来一次获取所有数据,最大限度地减少数据库调用的数量并在代码中处理它吗?

或者您会使用对数据库进行多次调用并直接从数据库中完成结构吗?

也许有基于 x 数量的数据库行、层次结构深度或其他什么的不同答案?

编辑:我使用 Microsoft SQL Server,但其他角度的答案也很有趣。

0 投票
7 回答
6165 浏览

java - 树结构的正则表达式?

是否有用于搜索和修改树结构的正则表达式等价物?我正在寻找简洁的迷你语言(如 perl 正则表达式)。

这是一个示例,可以阐明我在寻找什么。

在上述树上可能的操作是“将节点 2.1 的子树移动到节点 1 的子树中”。操作的结果可能看起来像..

搜索和替换操作,例如查找所有具有至少 2 个子节点的节点、查找数据以“a”开头的所有节点,如果子树至少有 2 个其他兄弟节点,则将其替换为“b”等。应该支持。

对于字符串,其中唯一的维度是字符串的长度,我们可以使用正则表达式执行许多上述操作(或它们的一维等效项)。我想知道是否有树的等价物。(而不是单个正则表达式,您可能需要编写一组转换规则,但这没关系)。

我想知道是否有一些简单的迷你语言(不是正则表达式本身,而是通过库等可以像正则表达式一样访问的东西)。执行这些操作?最好作为 python 库。

0 投票
3 回答
882 浏览

javascript - 在Javascript中将树打包成数组

好的,所以这应该不难,但是我遇到了奇怪和奇怪的侥幸。

我正在尝试将一棵树打包成一个数组,其中每个节点类似于:

  • 标题:字符串显示
  • 键:id 值
  • children:子节点数组

侥幸太奇怪了,我根本无法理解:当我尝试将孩子添加到节点时,我会做类似的事情

这是删除一些以前插入的节点....所以我做了一些调试,发现这段代码:

有错,这根本没有任何意义 - 如果 node.children 未定义,node.children = new Array() 不应该删除任何东西......,对吗?

难道我做错了什么?如果是这样,我如何将树打包到 Javascript 中的数组中?

0 投票
3 回答
515 浏览

tree-structure - 树搜索功能

任何节点都可以有任意数量的子节点。为了搜索这棵树,我写了这样的东西

这不太管用...任何输入?

0 投票
2 回答
157 浏览

sql - 具有自动引用外键的树状结构中的根

我的应用程序使用某种“虚拟文件夹”,因此我需要将树结构存储在数据库中。保存数据的表非常简单,它有 3 列:

  • id_folder (int, 主键)
  • id_parent (int, 引用 id_folder)
  • 文件夹名称(字符串)

我的问题是:这是实现根的最佳方法?

  1. 使 id_parent 可以为空;根将是 id_parent=null 的文件夹,或者
  2. 使文件夹成为自己的父文件夹,即 id_folder=id_parent。

谢谢你。

0 投票
2 回答
195 浏览

jquery - 如何对使用 jquery $.post 调用返回的数据执行 jquery 调用

我有一个页面,它使用 jquery 将 html 表转换为使用 jquery treeTable 插件的文件结构。html 表位于名为“treeStructure”的 div 中

我可以将新文件夹添加到树中的任何文件夹中,并使用 post call 将新文件夹添加到数据库中。该帖子返回一个新的 html 表,其中包含添加的文件夹,并将“treeStructure” div 的内容替换为返回的数据。然后我想使用 jquery 将该表再次转换为文件结构(就像我在 $document.ready() 中所做的那样),而不刷新页面。

我想我需要使用 Jquery 的 .live() 功能,但我不知道如何做到这一点。

0 投票
4 回答
1182 浏览

php - 使用 PHP 创建一个高效的好友列表

我想建立一个包含一些社交网络元素的网站。

所以我一直在想一种有效的方法来存储朋友列表(有点像 Facebook)。

在搜索了一下之后,我遇到的唯一建议是制作一个带有两个“id”的“表格”,表示友谊。

这可能适用于小型网站,但似乎效率不高。

我有Java背景,但我对PHP不够精通。

我想到了一个想法,我认为它可以很好地工作,问题是我不确定如何实现它。

这个想法是将您朋友的所有“id”保存在树数据结构中,该树中的每个节点都类似于朋友 id 中的一个数字。

首先从 1 个节点开始,然后随着用户添加朋友而添加更多节点。(有点像 Lempel-Ziv)。

每个节点将能够指向 11 个其他节点,0 到 9 和 X。

“X”标记了 Id 的结尾。

例如看这棵树:

一个例子

在这棵树中,用户有 4 个朋友,他们的“id”如下:

  • 0
  • 143
  • 1436
  • 15

更新:正如之前可能不清楚的那样,这个想法是每个用户都将拥有一棵多维数组形式的树,其中指针本身的存在表示朋友的“id”。

如果每个用户都有这样一个多维数组,搜索 id "y" 是否是我的朋友,从我的朋友列表中删除 id "y" 或将 id "y" 添加到我的朋友列表中都需要恒定时间 O(1) 没有依赖于网站可能拥有的用户数量,唯一的缺点是,采用如此庞大的数组,将其序列化并将其推入表格的每一行似乎并不正确。

- 这甚至可以实施吗?

- 使用序列化将该树插入表中是否可行?

- 有没有更好的方法来做到这一点?

我选择这个的好处是,即使有大量的 id(数百万或数十亿),搜索、添加、删除时间也是线性的(取决于位数)。

对于实施此方法的任何帮助或有关改进或更改此方法的替代方法的任何建议,我将不胜感激。

0 投票
4 回答
1132 浏览

sql - 在数据库中存储树数据的最佳实践

我认为问题的典型形式是你有员工,员工有经理,所以经理有经理,除非他是 CEO。

那么如何存储数据呢?解决方案 1:似乎员工表可以有 manager_id 或者您可以有一个employee_manager 表(这样您可以有多个或零个经理)。

有人说解决方案 1 是个坏主意,因为 SQL 不支持递归,并且没有查询可以找到员工之上的所有经理。这些人有不同的想法(比如员工有一份经理名单),但是他们似乎都涉及到一堆非常难以维护的非规范化数据。

那么大家怎么看呢?