我想遞回地將鏈從父級回傳到家譜的最后一個孩子。我從代碼開始,不知道它有什么問題:
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
uj5u.com熱心網友回復:
您的代碼有兩個問題:
- 每當您組裝鏈時,您都需要呼叫parent,而不是您當前所在的節點
.parent_chain()。否則,您將重復呼叫一個節點,直到您遞回超過遞回深度。.parent_chain() - 您將字串設定為孩子參考的值。您可能想要存盤某種單獨的標簽。這不會直接影響您在這里嘗試執行的操作,但幾乎可以肯定這是一個錯誤,如果您想以任何方式使用子指標(例如,如果您想擴展此代碼以讀取從父母到孩子)。
這是解決這些問題的代碼片段。
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']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/425224.html
標籤:python-3.x 班级 递归 节点 链
上一篇:代碼在回傳值之前撤消自身
