繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM