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

我正在尝试创建一个实现n元树的Node类,但我也想跟踪每个节点的父级以追溯到根。

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和编码非常陌生,所以如果有人可以帮忙,我将不胜感激! 谢谢!

评论
  • Buck
    Buck 回复

    instead of self.parent = parent

    你想做

    self.parent = None # for root node only
    
    for child in children:
      child.parent = self
    

  • ramet
    ramet 回复

    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))
    

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