Python 实现一个树,让孩子和家长可以相互引用

Python 实现一个树,让孩子和家长可以相互引用,python,tree,Python,Tree,从 让我们创建一个python类来表示树。我们需要一些方法来解决这个问题 将数据存储在节点中,并以某种方式指示任何子节点,或 子树 class node(object): def __init__(self, value, children = []): self.value = value self.children = children 哇!这似乎太容易了。。。但信不信由你,它确实起作用 工作。让我们使用新类来存储我们的族谱 tree = node(

让我们创建一个python类来表示树。我们需要一些方法来解决这个问题 将数据存储在节点中,并以某种方式指示任何子节点,或 子树

class node(object):
    def __init__(self, value, children = []):
        self.value = value
        self.children = children
哇!这似乎太容易了。。。但信不信由你,它确实起作用 工作。让我们使用新类来存储我们的族谱

tree = node("grandmother", [
    node("daughter", [
        node("granddaughter"),
        node("grandson")]),
    node("son", [
        node("granddaughter"),
        node("grandson")])
    ]);
我希望能够获得每个
节点
实例的子节点和父节点,因此我认为需要同时定义其父节点和子节点

class node(object):
    def __init__(self, value, children = [], parent = []):
        self.value = value
        self.children = children
        self.parent = parent

但问题是,每个节点的子节点和父节点内部都有一个副本。如果更改其值,则必须更改其副本中的所有值。在C++中,没有这样的问题,因为我们可以通过将指针存储到它的子节点和父节点中来引用节点的子节点和父节点。我想知道如何在Python中实现这样一个树?谢谢。

您可以在节点构造函数中指定子节点的父节点:

class node(object):
    def __init__(self, value, children = None):
        self.value = value
        self.children = children or []
        self.parent = None
        for child in self.children:
            child.parent = self

您可以在节点构造函数中指定子节点的父节点:

class node(object):
    def __init__(self, value, children = None):
        self.value = value
        self.children = children or []
        self.parent = None
        for child in self.children:
            child.parent = self
python中没有对象的副本,除非显式克隆它们


python中没有对象的副本,除非明确克隆它们

谢谢。Python没有指针或引用。那么,我们怎样才能在总体上实现同样的目标呢?@Tim。Python中的每个变量都是对一个对象的引用。@Tim See OK,我喜欢这个答案而不是我的答案,所以我删除了我的答案。在构造函数中使用
children=[]
意味着,如果以后添加了子节点,则创建的没有子节点的节点都将共享子节点。谢谢。Python没有指针或引用。那么,我们怎样才能在总体上实现同样的目标呢?@Tim。Python中的每个变量都是对对象的引用。@Tim See OK,我更喜欢这个答案而不是我的答案,因此我删除了我的答案。在构造函数中使用
children=[]
意味着如果以后添加了子节点,则创建的没有子节点的节点将共享子节点。