擅长:python、mysql、java
<p>堆栈是解析树时非常有用的数据结构。您只需始终保留从最后添加的节点到堆栈根的路径,这样就可以根据缩进的长度找到正确的父节点。类似这样的代码应该适用于分析上一个示例:</p>
<pre><code>import re
line_tokens = re.compile('( *)(\\*|-) (.*)')
def parse_tree(data):
stack = [{'title': 'Root node', 'children': []}]
for line in data.split("\n"):
indent, symbol, content = line_tokens.match(line).groups()
while len(indent) + 1 < len(stack):
stack.pop() # Remove everything up to current parent
if symbol == '-':
stack[-1].setdefault('notes', []).append(content)
elif symbol == '*':
node = {'title': content, 'children': []}
stack[-1]['children'].append(node)
stack.append(node) # Add as the current deepest node
return stack[0]
</code></pre>