问题标签 [modified-preorder-tree-t]

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 投票
3 回答
454 浏览

language-agnostic - 修改前序树遍历 - 在没有指定父节点时确定“顶部”

我正在为网站上的类别树实现一个修改后的预排序树遍历类,但是我在一个场景中遇到了麻烦。通常在插入新类别时会指定顶级父级,其在树中的左值用于确定新类别在树中的位置。但是,有时可能没有指定父类,这意味着新类别必须进入树的顶部,位于树顶部的任何其他类别的右侧。

查看其他一些具有类似结构的应用程序,其中许多似乎在安装时在树中插入了一个“根”节点。我想知道这是不是这样他们就不必检测它是否是第一个插入,并且他们总是有一个左参考。任何想法或伪代码将不胜感激。如果重要的话,我会在 PHP 中执行此操作。我的树可能看起来像这样:

我的想法是,在这种情况下,Apparel 的正确值将始终是表中最大的,但我不确定如何使用它来确定它是最后一个。任何帮助或提示将不胜感激。

0 投票
2 回答
5579 浏览

database - 在数据库中存储复合模式(分层数据)

在关系数据库中保存复合模式的“最佳实践”是什么?

我们一直在使用改进的预序树遍历。构建整个树非常快,但插入或删除新节点非常慢(所有左右值都需要调整)。查询一个节点的子节点也不容易而且很慢。

我们注意到的另一件事是,您确实必须确保树不会弄乱。您需要事务锁,否则左右值可能会损坏,修复损坏的左右树并非易事。

但是,Modified Preorder Tree Traversal 确实工作得很好,但我想知道是否有更好的选择。

0 投票
1 回答
407 浏览

php - 帮助在列 PHP MySQL 中显示数据(修改的预序树遍历)

您好,我正在尝试使用下面的代码获得多列显示(如果可以这样调用),结果如下:替代文字 . 有人能看出为什么这些叶子是坏的吗?或者请告诉我哪个更好:链接到子类别的类别表或邻接模型列表。

序列化版本链接文本

0 投票
3 回答
8252 浏览

php - PHP中遍历树的数据结构?

我没有 CS 或数据结构方面的背景。我想创建一个 PHP 类来存储修改后的预序横向树,用于操作和与数据库同步。

基本上我需要存储如下数据:

我正在考虑使用数组,但它似乎很麻烦。如果它是这样的数组数组:array( 'name'=> "PORTABLE ELECTRONICS", 'lft' => 10, 'rgt' = 19 ),那么重复遍历该数组以确保所有数字都存在等会很麻烦。

由于 PHP 有一些新的数据结构可用,我想知道这些中的任何一个是否比使用数组能给我带来任何好处?

  • SplDouble
  • 链表
  • SplStack
  • SplQueue
  • 分裂堆
  • 最大堆
  • SplMinHeap
  • SplPriorityQueue
  • SplFixedArray
  • SplObjectStorage

编辑:这个类不会成为存储在数据库表中的树的网关。(如果是的话,我只会查询类。)它只是某种 PHP 数据结构中的独立 mmpt。

0 投票
2 回答
1629 浏览

php - 如何基于树遍历算法从这个结果集中生成树视图?

我有这张桌子:

基于这个问题: Getting a modified preorder tree traversal model (nested set) into a <ul>

不同之处在于我在一张桌子上有很多树。每行都有一个外键,表示其父级和顶级父级:category_id 和 root_id。我也有基于此示例的 lft 和 rht 字段:http: //articles.sitepoint.com/article/hierarchical-data-database/2

基于此行:

如何构建代表这棵树的有序列表?

使用下面的sql:

我得到了这个结果:

替代文字

如您所见,我也需要按 root_id 排序,以便生成正确的树。

另外,在得到树之后,有没有办法按名称对每个节点进行排序?

0 投票
2 回答
3027 浏览

php - 如何在没有旋转父级的情况下平衡 PHP 中的二叉树?

我会尽量让自己清楚。基于邻接列表模型:http ://articles.sitepoint.com/article/hierarchical-data-database

我需要一种方法来平衡这棵树

类似于:

基于示例代码:

我修改了代码,使它可以输出一个像这样的平面 html 表:

$super_parent = '0000' 左节点条目进入平面列表:

但是我需要一种方法来将所有这些重新组织成一个平衡的树,而无需移动或旋转父级。虽然我可以考虑在数据库中创建一个重复表并进行第二次查询以显示或创建另一个 Binaray 树,但我认为可以将这样的扁平树重新组织为:

从左到右。0 代表 parent 或 super_parent 0000。

我想这样做的原因是我可以从原始树创建一个虚拟树,它将成为我项目中另一个算法的基础。

提前致谢。

鲍勃

0 投票
1 回答
319 浏览

sql - 如何获取左右树中节点的索引?

我的数据库中有左右树,这对性能来说是个问题。我将切换到具有 parentId 和 orderId 的系统。

我正在寻找一个可以为我提供左右树中节点索引的 sql 脚本。

0 投票
1 回答
456 浏览

sql - 如何更改为树遍历(嵌套集)创建的这个 CROSS JOIN SQL?

在下面的查询中,有一个名为main用于区分类别的字段。因此,有公共类别和主要类别,两者都可以在树上找到。该main字段只是一种类型,树结构没有任何内容,我的意思是,它就像一个状态字段。

有一个where子句指定父类别必须是主类别。另外,有时我需要做一个selectwhere parent category is a common category p.main =0

depth是元素在树中的位置。因此,如果一个类别是另一个类别的一级子级,则深度将为1,如果为两级,则深度为2

我的问题是,当我进行上面的选择时,如果在父亲是主要类别(选择p.main =1)的树上标记为公共类别的孩子,则公共类别depth总是0

换句话说,选择工作正常,如果我选择所有类别的顶部父标记为main,它将显示所有类别的树,包括标记为的子类别main=0。但在这种情况下,深度总是0

查看结果:

替代文字

该类别1423是子类别27并且不是主类别,但是27是,所以深度是0,但需要是1。该类别276是子64类别,两者都是主要类别,因此它具有正确的深度。

如何更改此查询以使该depth字段按预期工作?

参考这里:How to generate a tree view from this result set based on Tree Traversal Algorithm?

0 投票
4 回答
260 浏览

php - 数值范围优化

我有一组想要优化的数值范围。

这是初始值的简单示例:

优化后我期望的输出:

这些是存储在 MySQL 数据库中的修改后的先序树遍历(嵌套集)数据中的left和值。right我使用它们从结果中排除不活动的分支,并且目前根本没有优化范围。我想我可能会通过在使用前优化范围来获得性能提升。


更多信息

NOT BETWEEN使用子句将这些值传递到查询中以排除树中的非活动分支。我认为我可以通过使用最小范围集来优化该查询的性能。

0 投票
1 回答
2735 浏览

sql - 修改的前序树遍历:选择 1 级深的节点

我使用修改后的前序树遍历算法保存了分层有序数据。

这是表格内容:

可视化:

方案

我想要的是只选择某个节点的子节点(而不是子节点的子节点)。让我们说'topnode'。我正在尝试修复一个查询,但我似乎无法理解它。

搜索互联网给我带来了一段时间,例如:我可以计算每个节点的深度,但我似乎无法选择它。

这个查询

显示每个节点的深度:

太好了,但我不能使用列深度作为条件!