설정 괄호와 숫자를 사용하여 트리를 파싱하는 프로그램을 만들어야합니다. 따라서 각 괄호는 트리의 노드를 나타내며 프로그램은 각 부모 노드의 모든 자식 노드를 출력합니다. 파이썬 코드는 다음과 같습니다 :파이썬을 사용하여 트리를 파싱
class context(object):
def __init__(self, label=None, parent=None, children=[]):
self.label = label
self.parent = parent
self.children = []
self.list = []
def make_tree(self, tree):
stack = []
index = 0
while index < len(tree):
if tree[index] is '(':
if self.label is None:
self.label = tree[index+1]
index = index+1
else:
if len(stack) == 0:
stack.append(context(tree[index+1], self.label))
index = index+1
else:
stack.append(context(tree[index+1], stack[len(stack)-1].label))
index = index+1
elif tree[index] is ')':
if len(stack) == 1:
self.children.append(stack.pop())
return
else:
stack[len(stack)-2].children.append(stack.pop())
index = index+1
def traverse(self, size, obj):
if self.label is None or size == 0:
return []
temp_list = []
temp = []
dic = {}
tt = [children.label for children in obj.children]
dic[obj.label] = tt
temp.append(dic)
for child in obj.children:
temp_list = child.traverse(len(child.children), child)
print temp
return temp + temp_list
line = '(Root (1 (2) (3 (4) (5) ) (6 (7) (8 (9) ) ) ) ) '.split()
test = context()
test.make_tree(line)
final = test.traverse(len(test.children), test)
결과는 다음과 같습니다.
make_tree 함수를 사용하여 목록을 인쇄하면 올바른 결과를 얻습니다. 그러나 최종 결과가 올바르지 않습니다. 이 경우 {3 ': ['4 ','5 ']가 누락되었습니다.
의견이 있으십니까?
for child in obj.children:
temp_list += child.traverse(len(child.children), child)
:
다음과 같은 방법으로이 전화를? 왜냐하면 나는 단지'{{ 'Root': [ '1'}]]'를 보았 기 때문입니다. – p0lAris
@ flippex17이 코드를 실행 한 후에 final을 입력하면됩니다. – eChung00
오, 미안하지만,별로 관심을 기울이지 않았습니다. 나는 그것을 들여다 볼 것이다. – p0lAris