[英]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.parent
和child.parent = self
想象一下,你有一大堆桶。 最小的紅色,大一點的橙色,大一點的黃色,彩虹的所有顏色。
你把紅色放在橙色里面,然后你把橙色放在黃色里面,以此類推。 您的所有存儲桶現在都在其他存儲桶中。 除了紫羅蘭。 那是最大的桶。
現在你從紅色桶開始。 我們稱它為self
。 我們想要一個算法來計算有多少桶。 讓我們創建一個名為level
的計數器變量。
紅色桶的父節點是橙色桶,我們可以使用p = self.parent
獲得。 現在p
指的是橙色桶。 我們還想給我們的計數器加 1。 所以我們做level += 1
。
現在p
是橙色桶。 但我們還沒有完成。 我們需要找出橙色桶是否也有父桶。 我們將詢問其父級,並通過說p = p.parent
重用相同的變量p
。 在我們這樣做之后, p
變成了黃色桶。 我們再次向關卡添加一個。
我們一直這樣走,直到我們到達紫羅蘭色桶。 紫水桶是最外層的水桶。 所以當我們向紫羅蘭桶詢問它的父母時,我們不會得到答案。 換句話說,當p
是紫色桶時,我們做p = p.parent
, p
不再是桶!
好吧,只要p
仍然是一個桶,我們就只是在循環。 在代碼中,這就是說while p:
的位。 所以現在我們停止循環,我們的level
變量告訴我們有多少桶。
child.parent = self
告訴存儲桶 go 的位置。 讓我們來一個更大的桶。 一個黑色的桶。 我們稱它為self
。 我們還會得到紫羅蘭色桶。 我們會叫那個child
。 現在,我要告訴紫水桶到go進黑水桶。 child.parent = self
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.