当前位置: 首页 > 知识库问答 >
问题:

当有多棵树时,使用修改的前序树遍历进行选择

朱翔
2023-03-14

出于优化的原因,我已经实现了一个修改的预排序树遍历。我的桌子是这样的:

+----+-----------+------+-------+
| id | parent_id | left | right |
+----+-----------+------+-------+
|  1 |      NULL |    1 |     4 | 
|  2 |         1 |    2 |     3 | 
|  3 |      NULL |    1 |     4 | 
|  4 |         3 |    2 |     3 | 
+----+-----------+------+-------+

即表中存在任意数量的树。如果一个节点的父id为null,那么这自动意味着该节点是其树的基础。

文章指出,可以非常简单地选择节点的所有后代:

SELECT *
FROM table
WHERE
    left > ? 
    AND
    right < ?

现在我的问题是,选择显然将包括其他树的节点。毕竟,我甚至没有指定一棵树。是否可以仅从具有此模型的一个指定树中选择节点?

共有1个答案

徐卓
2023-03-14

不要以 left = 1 开始新树。使用 MAX() 1 作为值。这不会影响其他节点操作,并且树将由左右范围分隔。

 类似资料:
  • 我已经实现了一种方法来对一棵树(不是二叉树)进行预排序遍历。此树的每个父节点都有一个子节点数组,因此我使用的方法是: 将子节点链接到父节点“tnAA”的示例 但它只输出根节点,这种方法有什么问题? 解决方案:将children数组链接到每个parent:tnaa . setchildern(AA _ childern);

  • 这是在一次采访中问我的,但我搞砸了。我们给出了一个二叉树,但是,它被修改了,使得它的子节点永远不为空,如果一个非叶节点没有子节点,那么它的右/左子节点指向该节点本身。对于叶节点,它们指向下一个左节点和右节点。对于最左边和最右边的节点,它将指向自身和前一个/下一个元素。 示例: 这里4.左=4,4.右=5,5.左=4和5.右=6以此类推。 我们需要对这棵树进行顺序遍历。 请帮我弄一下。我无法为递归提

  • 我仍然是Java的初学者。我刚刚学习了二分搜索法树和前序遍历的概念,以及如何使用递归来实现二叉树的前序遍历。大概是这样的: 但是,如何为 N 元树实现相同的递归模型呢?其中每个节点的子节点数不一定为 2?因为.left和.right将不适用,不是吗?如果需要提供更多代码,请lmk,谢谢。

  • 本文向大家介绍在Javascript树中进行预遍历,包括了在Javascript树中进行预遍历的使用技巧和注意事项,需要的朋友参考一下 在这种遍历方法中,首先访问根节点,然后是左子树,最后是右子树。 我们从A开始, 并在进行预遍历之后,首先访问 A 本身,然后移至其左子树B。B 也进行了预遍历。一直进行到访问所有节点为止。该树的预遍历的输出将是- 这是我们将要实现的算法: 打印节点的数据 递归遍历

  • 本文向大家介绍C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法,包括了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我们已经见到了树数据结构的基本功能,现在是看树的一些额外使用模式的时候了。这些使用模式可以分为我们访问树节点的三种方式。有三种常用的模式来访问树中的所有节点。这些模式之间的差异是每个节点被访问的顺序。我们称这种访问节点方式为“遍历”。我们将看到三种遍历方式称为前序,中序和后序 。让我们更仔细地定义这三种遍历方式,然后看看这些模式有用的一些例子。 前序 - 在前序遍历中,我们首先访问根节点,然后递归