Python 如何访问n元树中节点的父节点?
我正在尝试创建一个实现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
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=自我?