繁体   English   中英

有人可以解释一下这条线吗

[英]can someone explain me this line

class TreeNode:
    def __init__(self, data):
        self.data = data
        self.children = []
        self.parent = None

    def get_level(self):
        level = 0
        p = self.parent
        while p:
            level += 1
            p = p.parent

        return level

    def print_tree(self):
        spaces = ' ' * self.get_level() * 3
        prefix = spaces + "|__" if self.parent else ""
        print(prefix + self.data)
        if self.children:
            for child in self.children:
                child.print_tree()

    def add_child(self, child):
        child.parent = self
        self.children.append(child)

def build_product_tree():
    root = TreeNode("Electronics")

    laptop = TreeNode("Laptop")
    laptop.add_child(TreeNode("Mac"))
    laptop.add_child(TreeNode("Surface"))
    laptop.add_child(TreeNode("Thinkpad"))

    cellphone = TreeNode("Cell Phone")
    cellphone.add_child(TreeNode("iPhone"))
    cellphone.add_child(TreeNode("Google Pixel"))
    cellphone.add_child(TreeNode("Vivo"))

    tv = TreeNode("TV")
    tv.add_child(TreeNode("Samsung"))
    tv.add_child(TreeNode("LG"))

    root.add_child(laptop)
    root.add_child(cellphone)
    root.add_child(tv)

    root.print_tree()

if __name__ == '__main__':
    build_product_tree()

我知道 self.parent 的含义,但有人请解释一下: p = p.parentchild.parent = self

想象一下,你有一大堆桶。 最小的红色,大一点的橙色,大一点的黄色,彩虹的所有颜色。

你把红色放在橙色里面,然后你把橙色放在黄色里面,以此类推。 您的所有存储桶现在都在其他存储桶中。 除了紫罗兰。 那是最大的桶。

现在你从红色桶开始。 我们称它为self 我们想要一个算法来计算有多少桶。 让我们创建一个名为level的计数器变量。

红色桶的父节点是橙色桶,我们可以使用p = self.parent获得。 现在p指的是橙色桶。 我们还想给我们的计数器加 1。 所以我们做level += 1

现在p是橙色桶。 但我们还没有完成。 我们需要找出橙色桶是否也有父桶。 我们将询问其父级,并通过说p = p.parent重用相同的变量p 在我们这样做之后, p变成了黄色桶。 我们再次向关卡添加一个。

我们一直这样走,直到我们到达紫罗兰色桶。 紫水桶是最外层的水桶。 所以当我们向紫罗兰桶询问它的父母时,我们不会得到答案。 换句话说,当p是紫色桶时,我们做p = p.parentp不再是桶!

好吧,只要p仍然是一个桶,我们就只是在循环。 在代码中,这就是说while p:的位。 所以现在我们停止循环,我们的level变量告诉我们有多少桶。

child.parent = self告诉存储桶 go 的位置。 让我们来一个更大的桶。 一个黑色的桶。 我们称它为self 我们还会得到紫罗兰色桶。 我们会叫那个child 现在,我要告诉紫水桶到go进黑水桶。 child.parent = self

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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