[英]How to access parent of a node in n-ary tree?
我正在尝试创建一个实现 n 叉树的节点 class 但我也想跟踪每个节点的父节点以追溯到根。
class Node(object):
def __init__(self, state, children=None, parent=None):
self.state = state
self.children = children or []
self.parent = parent
def add(self, obj):
self.children.append(Node(obj))
Node(obj).parent = self.state
这就是我一直在做的事情。 但是当我查看节点的父节点时,它会打印无。 在二叉树中,检查孩子是在左边还是右边很容易,但是对于 n 叉树,我真的不明白如何通过明确地将其设为父级来了解它。
我对 Python 和编码很陌生,所以如果有人能提供帮助,我将不胜感激! 谢谢!
编辑:
我在 IDE 上运行了这个:
>>> n = Node(4)
>>> l = [1,2,3]
>>> for i in l:
n.add_child(i)
>>> n.children.state
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
n.children.state
AttributeError: 'list' object has no attribute 'state'
>>> for child in n.children:
print(child.state)
1
2
3
>>> for child in n.children:
print(child.parent)
None
None
None
>>>
而不是self.parent = parent
你想做
self.parent = None # for root node only
for child in children:
child.parent = self
self.children.append(Node(obj))
在这里,您正在动态创建一个 Node 实例并将其附加到子列表中
Node(obj).parent = self.state
这是一个额外的 Node 实例,您将其父级分配为 self.state
我认为你正在尝试做这样的事情:
node = Node(obj)
node.parent = self
self.children.append(node)
这样,您将创建一个 Node 实例并将其引用存储在变量 node 中,然后将其父级分配为当前 Node 实例(带有自引用)并将引用保存到其子级列表。
另外,你可以这样做:
self.children.append(Node(obj, None, self))
因为您在构造函数中分配父级。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.