简体   繁体   English

如何在python中解析树?

[英]How to parse a tree in python?

I have an expression as follow: ( root (AA ( CC) (DD) ) (BB (CC) (DD) ) ) 我有一个表达式如下:(root(AA(CC)(DD))(BB(CC)(DD)))

I want to parse this expression using recursion and I created a tree class but I'm stuck after this man. 我想使用递归来解析该表达式,并创建了一个树类,但是我被这个人所困扰。

This looks this the following tree. 这看起来像下面的树。

                   root
                     |
                ____________
              AA           BB
              |             |  
       __________         ___________
      CC      DD          CC      DD

The output should look like this: 输出应如下所示:

Root -> AA BB
AA -> CC DD
BB -> CC DD

My tree class look like the following: 我的树类如下所示:

 class tree_parsing(object):

     def __init__(self, element=None):
         self.element = element
         self.children = []

Basically I want to store the children in a list member variable of the class. 基本上,我想将孩子存储在该类的列表成员变量中。 Can someone help figure this problem out? 有人可以帮忙解决这个问题吗? Thank You. 谢谢。

You can do something like this: 您可以执行以下操作:

#!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)

prints: 打印:

$ python example.py
Root -> AA BB
AA -> CC DD
BB -> CC DD
$
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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM