如何从函数中得到这些结果?

2024-10-02 08:16:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学校有一个简单的Python树作业,但我被卡住了。如何递归生成函数

电源如下所示

tree_s = '(A (B (C) (D (E) (F) ) )(G (H)) (I (J (K) )))'

treeSLst = [x for x in tree_s if x != ' ']
print(treeSLst)

p = Tree()
p.build_tree(p.root, treeSLst)
print(p)

以下是应该得出的结果:

ROOT--> [ A ]
A--> [ B,G,I ]
B--> [ C,D ]
D--> [ E,F ]
G--> [ H ]
I--> [ J ]
J--> [ K ]

印刷部分是给所以没有问题

def build_tree(self, parent, treeSLst):
    #index = -1

    for token in treeSLst:
        #index += 1
        if token == '(':
            #n = Node(treeSLst[index+1])
            #parent.add_child(n)
            #self.build_tree(n, treeSLst[index+1:])
        if token == ')':
            #return

我标记#的部分是我尝试的代码。当然,看起来很奇怪。 剩下的都给了

它需要递归地实现。 也许我应该使用“self.build\u tree()”,请帮帮我


Tags: 函数inbuildselftokentreeforindex
1条回答
网友
1楼 · 发布于 2024-10-02 08:16:15

您的代码将多次处理嵌套令牌。递归调用将处理它们,然后调用者的for循环将再次处理它们

不要使用for循环,而是使用while循环并从列表中提取每个标记来处理它

def build_tree(self, parent, treeSLst):
    while treeSlst:
        token = treeSLst.pop(0)
        if token == '(':
            n = Node(treeSlst.pop(0))
            parent.addChild(n)
            self.build_tree(n, treeSLst)
        elif token == ')':
            return

相关问题 更多 >

    热门问题