如何访问 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))

因为您是在构造函数中分配父对象。