Python递归地找到父的儿子

时间:2017-09-27 10:05:42

标签: python dictionary recursion

我实际上正在学习如何应用递归来解决一些现实生活中的问题。让我们说,我有一个存储家谱的字典,每个人的孩子也将存储在这个字典中,并且它也存在于树中。我想找出一个家庭的子树并将其存储到一个单独的字典中,所以我必须继续检查这个人是否有孩子。但是,我不知道为什么我的递归函数的新字典只能存储那些没有孩子的人。

dict[1] = [[2,3], 2] #the first one is the children list, the second one is the level in the family tree

newDict = {}
subtree = findSub(dict, 2, 0, newDict)

#my newDict is an empty dictionary, newDict= {}
#level stores the person's level in the tree
def findSub(dict, parent, level, newDict):

    level += 1

    children = dict[parent][0]

    if (len(children) == 0):
        info = [dict[parent][0], level]
        newDict[parent] = info

    else:
        for child in children:
            findSub(dict, child, level, newDict)

    return newDict

1 个答案:

答案 0 :(得分:2)

  

但是,我不知道为什么我的递归函数的新词典只能存储那些没有孩子的人。

def findSub(dict, parent, level, newDict):

    level += 1

    children = dict[parent][0]

    if (len(children) == 0):
    ^^^^^^^^^^^^^^^^^^^^^^^^
        info = [dict[parent][0], level]
   .....

if检查元素是否没有子元素。如果它有子项,你可以进一步递归,但在进一步递归之前不要添加元素。

如果你想保存父母(最终会导致整个子树),你会做类似的事情

def findSub(dict, parent, level, newDict):

    level += 1

    children = dict[parent][0]
    info = [dict[parent][0], level]
    newDict[parent] = info

    if (len(children) != 0):
        for child in children:
            findSub(dict, child, level, newDict)

    return newDict