【问题标题】:Recursively finding elements of the chain递归查找链中的元素
【发布时间】:2022-06-28 06:19:11
【问题描述】:

我想递归地将链从父级返回到家谱的最后一个孩子。我从代码开始,不知道它有什么问题:

class Tree:
    def __init__(self,kid,parent = None):
        self.kid = kid
        self.parent = parent


    def parent_chain(self):
        if self.parent != None:
            self.parent_chain()
        else:
            return self.kid # If no parent

a = Tree('Adam')
b = Tree('Beda')
c = Tree('Ceda')

c.parent = b
b.parent = a

print(c.parent_chain()) # Want it to return Adam --> Beda --> Ceda

【问题讨论】:

    标签: python class recursion nodes chain


    【解决方案1】:

    您的代码有两个问题:

    1. 无论何时组装链,您都需要在 父节点 上调用.parent_chain(),而不是您当前所在的节点。否则,您将在一个节点上重复调用.parent_chain(),直到您递归超过递归深度。
    2. 您将字符串设置为孩子引用的值。您可能想要存储某种单独的标签。这不会直接影响您在此处尝试执行的操作,但几乎可以肯定这是一个错误,如果您想以任何方式使用子指针(例如,如果您想扩展此代码以阅读从父母到孩子)。

    这是解决这些问题的代码 sn-p。

    class Tree:
        def __init__(self, val, kid=None, parent=None):
            self.val = val
            self.kid = kid
            self.parent = parent
    
        def parent_chain(self):
            if self.parent:
                result = self.parent.parent_chain()
                result.append(self.val)
                return result
            else:
                return [self.val]
    
    a = Tree('Adam')
    b = Tree('Beda')
    c = Tree('Ceda')
    
    c.parent = b
    b.parent = a
    
    print(c.parent_chain()) # Prints ['Adam', 'Beda', 'Ceda']
    

    【讨论】:

    • 谢谢!是否可以在不涉及任何列表的情况下返回结果?
    • 您要寻找什么样的输出?打印到控制台?否则,您将需要某种数据结构来保存这些值。
    • 是的,我正在使用队列。不想放整个代码,因为会很长!
    • 所以你想将元素添加到队列中,对吗?您可以遍历结果列表并将它们推送到队列中,或者将队列传递给parent_chain() 函数并将元素推送到那里。
    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 2013-12-10
    • 1970-01-01
    • 2018-06-13
    • 2013-03-17
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多