【问题标题】:Can you please explain the tree in Python?你能解释一下Python中的树吗?
【发布时间】:2021-08-22 05:21:16
【问题描述】:
class TreeNode:
    def __init__(self,data):
        self.data=data
        self.children = []
        self.parent = None

    def add_child(self,child):
        **child.parent=self**  ---- PLease explain this line. I am not getting it. 
        self.children.append(child)


def build_product_tree():
    root = TreeNode('Electronics')
    laptop= TreeNode('Laptop')
    root.add_child(laptop)
    return root

当我们添加孩子时,我们给 child.parent=self 我不明白这一点。请问有人解释一下吗?

【问题讨论】:

  • 在执行child.parent=self 时,self 是对root 的引用,因为代码执行root.add_child(laptop)。这会将对象root 传递给add_child() 作为self。这就是. 的意思。

标签: python class object tree


【解决方案1】:

该类支持子节点直接获取父节点,父节点获取子节点。

函数add_child的参数child也应该是TreeNode类型。

你感到困惑的那一行只是将输入子节点的父节点设置为self,这在Python中意味着“这个类”。

如果你学过链表。你可以理解为:next_elem->prev_node = this;

【讨论】:

    【解决方案2】:

    显然,您的代码在每个节点中都包含 parent 引用。从理论上讲,这不是必需的,因为它会添加冗余信息,但它有时会使算法更容易,但代价是使用了额外的内存。

    这是多余的,因为如果一个节点在其children 列表中有一个子节点,那么显然它就是那个子节点的父节点。如果该子节点的父引用引用了其他一些不相关的节点(或None),那将是不一致的。所以你的代码必须做一些工作来确保这种反向引用(从子到父)与“向下”引用(从父到子,通过children)一致。

    这就是这条线的用途。每当将子节点添加到父节点的 children 列表(发生在您询问的下面的行中)时,我们必须确保一致性,并将子节点的 parent 反向引用设置为那个父母,在这种情况下是self

    【讨论】:

      【解决方案3】:

      TreeNode 的实例具有以下属性,datachildrenparent。新创建的实例将parent 属性设置为None。 由于根节点没有父节点,只有子节点(如果有)。 我们在TreeNodeinstance 上调用方法add_child,因此root 是父元素,root 的任何子元素都将其作为父元素。因此,我们将子节点的parent 属性设置为self,这是父节点的实例。

      【讨论】:

        【解决方案4】:
        def add_child(self,child):
                child.parent=self
                self.children.append(child)
        

        add_child(self, child) 是一种将子节点添加到现有 TreeNode 的方法。

        child.parent = self - 这将添加当前节点 - (我们正在向其中添加子节点) 作为 child 的父节点。

        假设有一个现有节点A

        A.parent = None
        A.children = []
        A.data = 7
        

        有一个节点B是这样的:

        B.data = 5
        B.parent = None
        B.children = []
        

        现在我们想将节点 B 作为子节点添加到 A。所以我们调用 A.add_child(B)

        如果 B 是 A 的子级,那么 A 应该成为 B 的父级。因为您的 TreeNode 有对父级的引用)这就是这一行的作用.

        child.parent=self - 这将是 - B.parent = A

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-05
          相关资源
          最近更新 更多