我正在尝试编写一个简单的方法来以这种方式将树的节点链接在一起:
- 每片叶子都链接到树中的前一个和下一个叶子
- 每个非叶子都链接到树中的前一个叶子和下一个叶子
例如,如果我们有这棵树:
A
/ | \
B C D
/ \ / \
E F G H
|
I
这应该是该方法的结果:
- B.nextToken = E
- C.prevToken = B
- E.nextToken = F
- E.prevToken = B
- F.nextToken = I
- C.nextToken = I
- H.prevToken = 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.nextToken = 无
虽然
- F.nextToken = I
我想知道为什么会这样?递归函数末尾的最后几行应该允许父级的 next 与其最后一个子级相同!