打破多嵌套树python中的递归

时间:2017-01-05 05:30:00

标签: python recursion

我有一个多嵌套树结构,我试图找到提供的字符串/节点的当前级别。我使用递归来遍历节点并返回当前级别。

def dicq(self,value,current_level):
    d = {}
    for child in self.children:
       if child.name == value:
        print current_level
       else:
        (child.dicq(value,current_level+1))
    return current_level


root.dicq('7.3',1)

root是嵌套的树结构,我给它7.3(我找到级别的节点)和1(默认级别意味着第一个孩子)。如果我只是在if语句中打印current_level它是正确的但是如果我在if语句中返回它不会返回。我想在找到节点后立即返回当前级别。任何建议?

1 个答案:

答案 0 :(得分:2)

现在您的代码正在返回current_level,无论您找到的天气节点是否找到。 您需要做的是仅在找到匹配节点时返回current_level。如果不是,则返回指示未找到匹配节点的内容。此外,您需要确保结果在递归级别内正确传播,并在找到匹配项时停止查看。

这是可能有用的代码。注意:我还没有测试过。

def dicq(self,value,current_level):
    d = {}
    retval = -1
    for child in self.children:
       if child.name == value:
           retval = current_level
       else:
           retval = child.dicq(value,current_level+1)
           if retval != -1:
                break
    return retval

如果找到value,将返回该级别。如果没有,将返回-1,表示在树的该部分中找不到它。