如何访问 n-ary 树中节点的 parent?
How to access parent of a node in n-ary tree?
我正在尝试创建一个实现 n-ary 树的节点 class,但我还想跟踪每个节点的 parent 以追溯到根。
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
这就是我一直在做的事情。但是当我检查节点的 parent 时,它会打印 None。在二叉树中,检查 child 是在左边还是右边很容易,但是对于 n-ary 树,我真的不明白如何通过显式地使它成为 parent.
我对 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 实例(使用自引用)并将引用保存到其子列表中。
此外,您还可以:
self.children.append(Node(obj, None, self))
因为您是在构造函数中分配父对象。
我正在尝试创建一个实现 n-ary 树的节点 class,但我还想跟踪每个节点的 parent 以追溯到根。
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
这就是我一直在做的事情。但是当我检查节点的 parent 时,它会打印 None。在二叉树中,检查 child 是在左边还是右边很容易,但是对于 n-ary 树,我真的不明白如何通过显式地使它成为 parent.
我对 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 实例(使用自引用)并将引用保存到其子列表中。
此外,您还可以:
self.children.append(Node(obj, None, self))
因为您是在构造函数中分配父对象。