我理解预订,有序和后序树遍历算法就好了.(参考).我理解了一些用法:按顺序遍历二进制搜索树,预先克隆树.但我不能为我的生活提出一个现实世界的任务,我需要后序遍历才能完成.
能给我举个例子?并且:你能为我提供更好的预订遍历用途吗?
编辑:除了表达式树和RPN之外,还有谁可以给我一个例子吗?这真的是所有的后期订单都有用吗?
美丽的汤文档提供了属性.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儿童.
有没有办法在BeautifulSoup解析树上进行DFT?我正在尝试做一些事情,比如从根开始,通常,获取所有子元素,然后为每个子元素获取他们的孩子等,直到我点击终端节点,此时我将建立我的方式备份树.问题是我似乎找不到允许我这样做的方法.我找到了findChildren方法,但这似乎只是将整个页面放在一个列表中多次,每个后续条目都减少了.我可能能够使用它来进行遍历,但是除了列表中的最后一个条目之外,它似乎没有任何方法可以将条目标识为终端节点.有任何想法吗?
让我们把它想象成一个家谱,一个父亲有孩子,孩子有孩子,孩子有孩子等...所以我有一个递归函数,让父亲使用递归来获得孩子,现在只需打印他们调试输出窗口...但在某些时候(让它运行并打印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) 我试图用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=3或pk=4让所有的子对象?
例,
查询的pk=2 …
我正在看一本面试书,问题是:
您有两个非常大的二叉树:
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-stringT2-inorder-traversal-string 是一个子串 T1-inorder-traversal-string那T2必须是子串(虽然我假设作者的意思是子树)T1.我能解释一下这个逻辑吗?
编辑:用户BartoszMarcinkowski提出了一个好点.假设两个树都没有重复的节点.
假设我使用language-javascript库在Haskell中构建AST。AST具有不同类型的节点,并且每个节点可以具有这些不同类型的字段。每个类型可以具有许多构造函数。(所有类型的实例Data,Eq和Show)。
我想计算树中每种类型的构造函数的出现。我可以使用它toConstr来获得构造函数,理想情况下,我会先创建一个Tree -> [Constr]函数fisrt(然后计数很容易)。
有不同的方法可以做到这一点。显然,模式匹配太冗长了(使用9-28个构造函数可以想象3种类型)。
因此,我想使用通用遍历,并尝试在SYB库中找到解决方案。
everywhere函数不适合我的需求,因为我不需要Tree -> Tree转换。gmapQ,就其类型而言似乎很合适,但事实证明它不是递归的。everywhereM。它仍然会进行无用的转换,但是我可以使用Writer来收集toConstr结果。不过,这种方式确实感觉不正确。是否有其他选择不会执行无用的转换(对于此任务),而仍然提供构造函数的列表?(它们在树中出现的顺序暂时不重要)
我必须遗漏一些非常重要的东西,我一直在使用.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)
在这种情况下做其他事情.
我想在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) 例如,我有一些数据类型.让它成为二叉树:
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)
但它不起作用.我怎样才能解决这个问题?
tree-traversal ×10
python ×3
algorithm ×2
binary-tree ×2
haskell ×2
c# ×1
django ×1
django-mptt ×1
dom ×1
generics ×1
java-stream ×1
jquery ×1
mptt ×1
postorder ×1
traversal ×1