我有一个表达式如下:(根(AA(CC)(DD))(BB(CC)(DD)))
我想使用递归来解析这个表达式,我创建了一个树类,但是我被困在这个人之后。
这看起来是以下树。
root
|
____________
AA BB
| |
__________ ___________
CC DD CC DD
输出应如下所示:
Root -> AA BB
AA -> CC DD
BB -> CC DD
我的树类如下所示:
class tree_parsing(object):
def __init__(self, element=None):
self.element = element
self.children = []
基本上我想将子项存储在类的列表成员变量中。有人可以帮助解决这个问题吗?谢谢。
答案 0 :(得分:1)
您可以这样做:
#!python
# -*- coding: utf-8 -*-
class Node(object):
def __init__(self, name, left=None, right=None):
self.name = name
self.left = left
self.right = right
def dump_tree(node):
if node.left or node.right:
left = 'None' if node.left is None else node.left.name
right = 'None' if node.right is None else node.right.name
print('{0} -> {1} {2}'.format(node.name, left, right))
if node.left:
dump_tree(node.left)
if node.right:
dump_tree(node.right)
Root = Node(
'Root', Node('AA', Node('CC'), Node('DD')),
Node('BB', Node('CC'), Node('DD')),
)
dump_tree(Root)
打印:
$ python example.py
Root -> AA BB
AA -> CC DD
BB -> CC DD
$
答案 1 :(得分:0)
class Tree(object):
def __init__(self, name, left=None, right=None):
self.name = name
self.left = left
self.right = right
def Tree_Parsing(tree):
if tree.left != None and tree.right != None:
print tree.name + '->' + tree.left.name + ' ' + tree.right.name
Tree_Parsing(tree.left)
Tree_Parsing(tree.right)
Object = Tree( 'Root', Tree('AA', Tree('CC'), Tree('DD')), Tree('BB', Tree('CC'), Tree ('DD')),)
)
Tree_Parsing(Object)