タイトルがちょっと変わっているのを知っていますが、もちろんこれは私が実際に必要としているものと同じです。いくつかの病気に感染した葉(または支店)の一つでPython 3.5 - 「感染した木の枝に感染する」
A
┃
┣━━ B
┃ ┣━━ D
┃ ┣━━ E
┃ ┃ ┗━━ H
┃ ┗━━ F
┃ ┗━━ I
┗━━ C
┗━━ G
:
だから、私はこのような木を持っていると仮定することができます。
ツリーをトラバースすると、トラバーサル時にすべての「開かれた」ブランチ/リーフに感染しますが、は新しく開かれたものではありません。その枝を想定E
が感染していることができます - 彼らはすでにI
とG
この繰り返しで「開かれた」ではなくので、木の収率は、F
とC
枝を感染横断します。
私がこれまで持っているPythonコードは(infection_test.py
)である:出力
#!/usr/bin/env python
from itertools import chain
class Node():
def __init__(self, name, infected=False):
self.name = name
self.children = []
self.infected = infected
def __str__(self):
return 'Node ' + self.name + (' *** INFECTED ***' if self.infected else '')
A = Node('A');B = Node('B');C = Node('C')
D = Node('D');E = Node('E', True);F = Node('F');
G = Node('G');H = Node('H');I = Node('I');
A.children = [B, C]
B.children = [D, E, F]
E.children = [H]
F.children = [I]
C.children = [G]
def traverse_tree(node, level=0):
print (' '*level, node)
level += 1
infected_found = False
for child in node.children:
if child.infected:
infected_found = True
traverse_tree(child, level)
child.infected = infected_found
print('First traversal:')
traverse_tree(A)
print('\nAfter Infection:')
traverse_tree(A)
:
First traversal:
Node A
Node B
Node D
Node E *** INFECTED ***
Node H
Node F
Node I
Node C
Node G
After Infection:
Node A
Node B
Node D
Node E *** INFECTED ***
Node H
Node F *** INFECTED ***
Node I
Node C
Node G
がどのように私は 'より高いレベル' の枝が(C
のように)感染して作ることができ、次の反復に影響を与えずにtraverse_tree
?
(私は「開かれた枝」が十分に明確ですが、ちょうどそれがあることを確認することを願っています - これらは、感染した枝が発見したとき、すでにfor child
ループから得枝です)