Python 如何访问n元树中节点的父节点?

Python 如何访问n元树中节点的父节点?,python,class,tree,nodes,parent,Python,Class,Tree,Nodes,Parent,我正在尝试创建一个实现n元树的节点类,但我还希望跟踪每个节点的父节点,以追溯到根节点 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): s

我正在尝试创建一个实现n元树的节点类,但我还希望跟踪每个节点的父节点,以追溯到根节点

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
>>> 
>n=节点(4)
>>>l=[1,2,3]
>>>对于l中的i:
n、 添加_child(i)
>>>国家儿童基金会
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
n、 儿童国家
AttributeError:“列表”对象没有属性“状态”
>>>对于n中的儿童:
打印(子状态)
1.
2.
3.
>>>对于n中的儿童:
打印(子.父)
没有一个
没有一个
没有一个
>>> 
而不是
self.parent=parent

你想做什么

self.parent=None#仅适用于根节点
对于儿童中的儿童:
child.parent=self
而不是
self.parent=parent

你想做什么

self.parent=None#仅适用于根节点
对于儿童中的儿童:
child.parent=self
在这里,您正在动态创建一个节点实例,并将其附加到子列表中

Node(obj).parent = self.state
这是动态节点的一个额外实例,您正在将其父节点指定为self.state

我想你是想做这样的事情:

node = Node(obj)
node.parent = self
self.children.append(node)
通过此操作,您将创建节点实例并将其引用存储在变量节点中,然后将其父节点指定为当前节点实例(具有自引用),并将引用保存到其子节点列表中

此外,您还可以:

self.children.append(Node(obj, None, self))
因为您正在构造函数中分配父级

在这里,您正在动态创建一个节点实例,并将其附加到子列表中

Node(obj).parent = self.state
这是动态节点的一个额外实例,您正在将其父节点指定为self.state

我想你是想做这样的事情:

node = Node(obj)
node.parent = self
self.children.append(node)
通过此操作,您将创建节点实例并将其引用存储在变量节点中,然后将其父节点指定为当前节点实例(具有自引用),并将引用保存到其子节点列表中

此外,您还可以:

self.children.append(Node(obj, None, self))

因为您在构造函数中分配父项。

您能写下您是如何使用它的以及您是如何检查的吗parent@ashishsingh我已经做了编辑。你可以看看。我已经写了一个答案。。请检查你能写下你是怎么使用它的吗?你是怎么检查的parent@ashishsingh我已经做了编辑。你可以看看。我已经写了一个答案。。请检查代码中的此更改是在初始化还是在add()函数中完成的?如果我这样做,我是否需要保留“parent”作为init的参数?这对于构造函数来说,
add
函数也应该更改。。请注意,在
add
中,您正在创建两个不同的节点。ie。。您正在将一个节点添加到子数组中,但您正在完全不同的节点上设置父节点仅供澄清,在使用节点(obj)时,如何在完全不同的节点上设置父节点。父节点=自身。状态?节点(obj)每次调用时都会创建一个新节点,因此我应该只执行obj.parent=self?代码中的此更改是在初始化还是在add()函数中完成的?如果我这样做,我是否需要保留“parent”作为init的参数?这对于构造函数来说,
add
函数也应该更改。。请注意,在
add
中,您正在创建两个不同的节点。ie。。您正在将一个节点添加到子数组中,但您正在完全不同的节点上设置父节点仅供澄清,在使用节点(obj)时,如何在完全不同的节点上设置父节点。父节点=自我。状态?节点(obj)在您每次调用它时都会创建一个新节点,因此我应该只执行obj.parent=自我?