recursion
을 사용하거나를 사용할 수 있습니다.. 어쨌든 상관 없습니다. 그러나 나무를 검색하는 전략이 필요합니다. 여기
그래프를 통해 이동하는 몇 가지 strategry 있습니다
주요 아이디어에 대한 사소한 두 번 같은 노드/잎, 통과하지 않는 것입니다 그래프에는 coloring
이 필요합니다.
사용할 수있는 디자인 패턴이 몇 가지 있습니다. visitor
패턴을 사용하고 .visit()
메서드를 TreeHierarchyClass
에 추가하면 해당 하위 노드를 방문하고 다른 하나는 이름으로 노드를 찾습니다.
예 :
:의은 샘플 트리 구조를 구축 할 수
def visit(tree):
visited = set()
nonvisited = set()
nonvisited.update(tree.children)
while nonvisited:
item = nonvisited.pop()
# already seen
if item in visited:
continue
# mark item
visited.add(item)
yield item
# add children
nonvisited.update(item.children)
: 당신은 모든 노드를 방문 할 수 있습니다
# imagine we got this class
class TreeHierarchyClass(object):
def __init__(self, value):
self.children = []
self.value = value
if self.value == 13:
self.name = 'the lucky one.'
def add(self, value):
self.children.append(type(self)(value))
지금의이 일부 항목을 찾을 수 있습니다 :
def find(name):
for item in visit(root):
print 'checking item with value %d' % item.value,
if getattr(item, 'name', None) == name:
print '- found it.'
break
else:
print '- nope, keep searching.'
else:
print 'Sorry, not found.'
find('the lucky one.')
find('the lost one.')
이 예제가 인쇄됩니다 :
>>> find('the lucky one.')
checking item with value 7 - nope, keep searching.
checking item with value 0 - nope, keep searching.
checking item with value 1 - nope, keep searching.
checking item with value 12 - nope, keep searching.
checking item with value 2 - nope, keep searching.
checking item with value 9 - nope, keep searching.
checking item with value 19 - nope, keep searching.
checking item with value 3 - nope, keep searching.
checking item with value 11 - nope, keep searching.
checking item with value 4 - nope, keep searching.
checking item with value 14 - nope, keep searching.
checking item with value 5 - nope, keep searching.
checking item with value 6 - nope, keep searching.
checking item with value 15 - nope, keep searching.
checking item with value 8 - nope, keep searching.
checking item with value 16 - nope, keep searching.
checking item with value 13 - found it.
>>> find('the lost one.')
checking item with value 7 - nope, keep searching.
checking item with value 0 - nope, keep searching.
checking item with value 1 - nope, keep searching.
checking item with value 12 - nope, keep searching.
checking item with value 2 - nope, keep searching.
checking item with value 9 - nope, keep searching.
checking item with value 19 - nope, keep searching.
checking item with value 3 - nope, keep searching.
checking item with value 11 - nope, keep searching.
checking item with value 4 - nope, keep searching.
checking item with value 14 - nope, keep searching.
checking item with value 5 - nope, keep searching.
checking item with value 6 - nope, keep searching.
checking item with value 15 - nope, keep searching.
checking item with value 8 - nope, keep searching.
checking item with value 16 - nope, keep searching.
checking item with value 13 - nope, keep searching.
checking item with value 17 - nope, keep searching.
checking item with value 10 - nope, keep searching.
checking item with value 18 - nope, keep searching.
Sorry, not found.
개체의 어떤 유형의'root'입니까? '목록'? 'dict'? 나는 당신의 예제에서'root = [parent = [...'와 같은 하위 선언을 허용하는 파이썬 구문이 없다는 것을 알고있다. – jdotjdot