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

问题描述 投票:0回答:1

我试图创建一个实现n-ary树的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

这就是我一直在研究的问题。但是当我检查查看一个节点的父节点时,它打印的是None。在二进制树中,检查子节点是在左边还是右边很容易,但是对于n-ary树,我不太明白如何去显式地把它作为父节点。

我对Python和编码很陌生,所以如果有人能帮助我,我会非常感激!谢谢你。

EDIT.我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序:我在IDE上运行了这样的程序

我在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
>>> 
python class tree nodes parent
1个回答
1
投票

而不是 self.parent = parent

你要做

self.parent = None # for root node only

for child in children:
  child.parent = self

1
投票
self.children.append(Node(obj))

在这里,你是在飞行中创建一个Node实例,并将其追加到子节点列表中。

Node(obj).parent = self.state

那是一个额外的Node实例,你把它的父体赋值为self.state。

我想你想做的是这样的事情,你是在创建一个Node实例,并将其引用存储在变量node中,然后将其父体赋值为当前的Node实例(带有自我引用),并将其引用保存到其子代列表中。

node = Node(obj)
node.parent = self
self.children.append(node)

用这个方法创建一个Node的实例 并把它的引用存储在变量node中 然后把它的父节点指定为当前的Node实例(有自我引用) 并把引用保存到它的子节点列表中。

另外,你也可以这样做。

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

因为你是在构造函数中分配父节点的。

© www.soinside.com 2019 - 2024. All rights reserved.