标签: tree-traversal

真实世界的前/后顺序树遍历示例

我理解预订,有序和后序树遍历算法就好了.(参考).我理解了一些用法:按顺序遍历二进制搜索树,预先克隆树.但我不能为我的生活提出一个现实世界的任务,我需要后序遍历才能完成.

能给我举个例子?并且:你能为我提供更好的预订遍历用途吗?

编辑:除了表达式树和RPN之外,还有谁可以给​​我一个例子吗?这真的是所有的后期订单都有用吗?

algorithm binary-tree tree-traversal postorder

11
推荐指数
1
解决办法
7246
查看次数

美丽的汤从标签获取标签(不是Navigable Strings)的孩子

美丽的汤文档提供了属性.contents和.children来访问给定标记的子元素(分别是列表和迭代),并包括Navigable Strings和Tags.我只想要Tag类型的孩子.

我目前正在使用列表理解来完成此任务:

rows=[x for x in table.tbody.children if type(x)==bs4.element.Tag]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个更好/更pythonic /内置的方式来获得Tag儿童.

python beautifulsoup tree-traversal

11
推荐指数
1
解决办法
7576
查看次数

BeautifulSoup Parse Tree上的深度优先遍历

有没有办法在BeautifulSoup解析树上进行DFT?我正在尝试做一些事情,比如从根开始,通常,获取所有子元素,然后为每个子元素获取他们的孩子等,直到我点击终端节点,此时我将建立我的方式备份树.问题是我似乎找不到允许我这样做的方法.我找到了findChildren方法,但这似乎只是将整个页面放在一个列表中多次,每个后续条目都减少了.我可能能够使用它来进行遍历,但是除了列表中的最后一个条目之外,它似乎没有任何方法可以将条目标识为终端节点.有任何想法吗?

python beautifulsoup tree-traversal

10
推荐指数
2
解决办法
9324
查看次数

创建新进程是否有助于我遍历一棵大树?

让我们把它想象成一个家谱,一个父亲有孩子,孩子有孩子,孩子有孩子等...所以我有一个递归函数,让父亲使用递归来获得孩子,现在只需打印他们调试输出窗口...但在某些时候(让它运行并打印26000行后一小时)它给了我一个StackOverFlowException.

那真的是内存不足吗?嗯?那我不应该得到"内存不足"吗? 在其他帖子上,我发现有人说如果递归调用的次数太多,你可能仍会得到一个SOF异常......

无论如何,我的第一个想法是将树打破成更小的子流...所以我知道我的根父亲总是有这五个孩子的事实,所以不是一次用root调用我的方法传递给它,我说好了有孩子的根传递给它五次.它帮助我思考..但它们中的一个仍然是如此之大 - 当它崩溃时26000行 - 并且仍然有这个问题.

如何在某个特定深度的运行时创建应用程序域并创建新进程? 这有帮助吗?

如何创建自己的堆栈并使用它而不是递归方法?这有帮助吗?

这里也是我的代码的高级别,请看一下,也许实际上有一些愚蠢的错误会导致SOF错误:

private void MyLoadMethod(string conceptCKI)
{

// make some script calls to DB, so that moTargetConceptList2 will have Concept-Relations for the current node. 

            // when this is zero, it means its a leaf. 
            int numberofKids = moTargetConceptList2.ConceptReltns.Count();
            if (numberofKids == 0)
                return;
            for (int i = 1; i <= numberofKids; i++)
            {
                oUCMRConceptReltn = moTargetConceptList2.ConceptReltns.get_ItemByIndex(i, false);

                //Get the concept linked to the relation concept
                if (oUCMRConceptReltn.SourceCKI == sConceptCKI)
                { …
Run Code Online (Sandbox Code Playgroud)

c# tree-traversal

10
推荐指数
2
解决办法
259
查看次数

如何使用Django mptt查询节点的所有子节点的对象?

我试图用django-mppt获取Django上给定节点的所有子节点的对象

我有一个如下所示设计的模型,具有相同缩进级别的类/类别(节点)定义兄弟,内部缩进是子.标有类别的对象显示在类别(节点)下方.对象以-符号开头.类/类别(节点)中的数字是ids.

所有节点都是Category具有id给定的类的实例.

high school (1)
    class 8 (2)
        division a (3)
            -Billie
            -Tre
            -Mike

        division b (4)
            -Patrik
            -Pete
            -Andy
    class 9 (3)
        division a (8)
            -Mark
            -Tom
            -Travis

        division b (5)
            -Gerard
            -Frank
            -Mikey

    class 10  (4)
        division a (6)
            -Hayley
            -Jeremy
            -Taylor

        division b (7)
            -Steven
            -Slash
            -Izzy
Run Code Online (Sandbox Code Playgroud)

我可以通过这种方式获取特定节点的查询集,

>>> Category.objects.get(pk=7).product_set.all()
[Steven, Slash, Izzy]


>>> Category.objects.get(pk=4).product_set.all()
[Mark, Tom, Travis]
Run Code Online (Sandbox Code Playgroud)

我怎样查询pk=1,pk=2,pk=3pk=4让所有的子对象?

例,

查询的pk=2 …

python django mptt tree-traversal django-mptt

10
推荐指数
2
解决办法
5919
查看次数

为什么inorder和preorder遍历对于创建算法以确定T2是否是T1的子树非常有用

我正在看一本面试书,问题是:

您有两个非常大的二叉树:T1具有数百万个节点,并且 T2具有数百个节点.创建一个算法来确定是否T2是子树T1.

作者提到这是一个可能的解决方案:

请注意,此处的问题指定T1有数百万个节点 - 这意味着我们应该注意我们使用了多少空间.例如,假设T1有1000万个节点 - 这意味着仅有数据40 mb.我们可以创建一个表示inorder和preorder遍历的字符串.如果T2preorder遍历是's preorder遍历的子字符串T1,并且T2inorder遍历是遍历遍历的子字符串T1,那么它T2是一个子字符串T1.

我不太清楚为什么如果这些是真的背后的逻辑:

  • T2-preorder-traversal-string 是一个子串 T1-preorder-traversal-string
  • T2-inorder-traversal-string 是一个子串 T1-inorder-traversal-string

T2必须是子串(虽然我假设作者的意思是子树)T1.我能解释一下这个逻辑吗?

编辑:用户BartoszMarcinkowski提出了一个好点.假设两个树都没有重复的节点.

algorithm binary-tree tree-traversal

9
推荐指数
1
解决办法
701
查看次数

在Haskell中一般遍历树的最简单方法

假设我使用language-javascript库在Haskell中构建AST。AST具有不同类型的节点,并且每个节点可以具有这些不同类型的字段。每个类型可以具有许多构造函数。(所有类型的实例DataEqShow)。

我想计算树中每种类型的构造函数的出现。我可以使用它toConstr来获得构造函数,理想情况下,我会先创建一个Tree -> [Constr]函数fisrt(然后计数很容易)。

有不同的方法可以做到这一点。显然,模式匹配太冗长了(使用9-28个构造函数可以想象3种类型)。

因此,我想使用通用遍历,并尝试在SYB库中找到解决方案。

  1. 有一个everywhere函数不适合我的需求,因为我不需要Tree -> Tree转换。
  2. 存在gmapQ,就其类型而言似乎很合适,但事实证明它不是递归的。
  3. 到目前为止,最可行的选择是everywhereM。它仍然会进行无用的转换,但是我可以使用Writer来收集toConstr结果。不过,这种方式确实感觉不正确。

是否有其他选择不会执行无用的转换(对于此任务),而仍然提供构造函数的列表?(它们在树中出现的顺序暂时不重要)

generics haskell abstract-syntax-tree tree-traversal

9
推荐指数
1
解决办法
109
查看次数

jQuery:如果所选元素$(this)的父类名为'last'

我必须遗漏一些非常重要的东西,我一直在使用.parent().parent().parent().. etc来遍历DOM和.next().next()来遍历DOM.

我知道这是错误的,我需要更可靠的东西,我需要一个选择器,它将从点击的元素$(this)遍历DOM,看看点击的元素是否在一个"last"类的元素中.

div.last > div > table > tr > td > a[THE ITEM CLICKED is in the element last]
Run Code Online (Sandbox Code Playgroud)

div > div > table > tr > td > a[THE ITEM CLICKED is not in the element last]
Run Code Online (Sandbox Code Playgroud)

然后如果结果有长度

var isWithinLastRow = [amazingSelector].length;
Run Code Online (Sandbox Code Playgroud)

在这种情况下做其他事情.

jquery dom traversal tree-traversal

8
推荐指数
2
解决办法
2万
查看次数

如何将树结构转换为java中的节点流

我想在Java8节点流中转换树

这是存储可以选择的数据的节点树

public class SelectTree<D> {

  private D data;

  private boolean selected = false;

  private SelectTree<D> parent;

  private final List<SelectTree<D>> children = new ArrayList<>();

  public SelectTree(D data, SelectTree<D> parent) {
    this.data = data;
    if (parent != null) {
      this.parent = parent;
      this.parent.getChildren().add(this);
    }
  }

  public D getData() {
    return data;
  }

  public void setData(D data) {
    this.data = data;
  }

  public boolean isSelected() {
    return selected;
  }

  public void setSelected(boolean selected) {
    this.selected = selected;
  }

  public SelectTree<D> getParent() { …
Run Code Online (Sandbox Code Playgroud)

tree-traversal java-stream

8
推荐指数
2
解决办法
5536
查看次数

在Haskell中实现可折叠

例如,我有一些数据类型.让它成为二叉树:

data Tree a = Leaf a | Branch (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)

例如,我实现了树的遍历:

treeFoldt :: Tree t -> [t]
treeFoldt = foldt1 (:) []
Run Code Online (Sandbox Code Playgroud)

它的效果非常好.但我想实现Foldable界面.

我想,我应该这样写:

instance Foldable Tree where
  foldr = treeFoldt
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我怎样才能解决这个问题?

haskell tree-traversal

8
推荐指数
1
解决办法
554
查看次数