我正在尝试编写一个简单的方法,以这种方式将树的节点链接在一起:
例如,如果我们有一棵树:
A
/ | \
B C D
/ \ / \
E F G H
|
I
这应该是方法的结果:
方法代码如下:
prevToken = None
def depthFirstTraverseTokenLinking(tree):
global prevToken
if len(tree.children) == 0:
tree.prevToken = prevToken
if prevToken != None :
prevToken.nextToken = tree # Is something wrong with this line?
prevToken = tree
return
for c in tree.children:
depthFirstTraverseTokenLinking(c)
tree.prevToken = tree.children[0].prevToken
tree.nextToken = tree.children[-1].nextToken
出于某种奇怪的原因,非叶子没有链接到下一个叶子,例如:
尽管
我想知道为什么会这样?递归函数末尾的最后几行应该表示父函数的下一行与其上一个子函数的下一行相同!你知道吗
或者,使用实例检查循环
如果节点没有子节点,则生成器生成节点作为基本情况,否则生成另一个生成器沿树向下移动。这是警告吗节点.子节点从左到右排列。你知道吗
…还有一堆发电机的回路。。。当我写的时候,它变得更难看了-我想你可以把它清理干净一点,当它是真的。。。你知道吗
问题是,当您访问C时,只遍历它的子对象E&F
“I”还没有被访问,所以
C.children[-1].nextToken == None
因为只有访问“I”才会设置F.nextToken
解决方案:您必须首先在所有叶上运行,然后在内部节点上运行第二次。你知道吗
例如:
还要注意内部节点的
prevToken
/nextToken
的变化。如果您希望它们链接到实际的第一个/最后一个叶,则需要这样做。你知道吗相关问题 更多 >
编程相关推荐