class TMTree:
 """A TreeMappableTree: a tree that is compatible with the treemap
 visualiser.

 While this is not an abstract class,
 it should be subclassed to fit the needs of the
 specific data being visualized.

 You may NOT add any attributes, public or private, to this class.

 You can freely add private methods as needed.

 === Public Attributes ===
 rect:
 The pygame rectangle representing this node in the treemap
 visualization. A pygame rectangle is of the form:
 (x, y, width, height) where (x, y) is the upper, left corner of
 the rectangle.
 data\_size:
 The size of the data represented by this tree.

 === Private Attributes ===
 \_colour:
 The RGB colour value of the root of this tree.
 \_name:
 The root value of this tree.
 \_subtrees:
 The subtrees of this tree.
 \_parent\_tree:
 The parent tree of this tree; that is to say, the tree that contains
 this tree as a subtree, or None if this tree is the root.
 \_expanded:
 Whether this tree is considered expanded for visualization.

 Note: this class does not support a representation for an empty tree,
 as we are only interested in visualizing non-empty trees.

 === Representation Invariants ===
 - data\_size > 0
 - \_name is a non-empty string
 - If \_subtrees is not empty, then data\_size is greater than or equal to the
 sum of the data\_size of each subtree.

 - \_colour's elements are each in the range 0-255, inclusive

 - if \_parent\_tree is not None, then self is in \_parent\_tree.\_subtrees
 - if \_parent\_tree is None, this is a root of a tree (no parent)
 - this tree is the \_parent\_tree for each tree \_subtrees

 - if \_expanded is True, then \_parent\_tree.\_expanded is True
 - if \_expanded is False, then \_expanded is False for \*\*every\*\* subtree
 in \_subtrees
 - if \_subtrees is empty, then \_expanded is False

 See method docstrings for sample usage.
 """

 rect: Optional[tuple[int, int, int, int]]
 data\_size: int
 \_colour: tuple[int, int, int]
 \_name: str
 \_subtrees: list[TMTree]
 \_parent\_tree: Optional[TMTree]
 \_expanded: bool

 def \_\_init\_\_(self, name: str, subtrees: list[TMTree],
 data\_size: int = 1) -> None:
 """Initialize a new TMTree with a random colour and the provided .

 This tree's data\_size attribute is initialized to be
 the sum of the sizes of its + .

 Set this tree as the parent for each of its subtrees.

 The tree is initially expanded, unless it has no subtrees.

 The rect attribute is initially None.

 This tree is initially a root (has no parent).

 Preconditions:
 is a non-empty string
 >= 0
 if is empty, then > 0
 all trees in are roots (they don't have parents)

 >>> t1 = TMTree('B', [], 5)
 >>> t1.rect is None
 True
 >>> t1.data\_size
 5
 >>> t2 = TMTree('A', [t1], 1)
 >>> t2.rect is None
 True
 >>> t2.data\_size
 6
 """
 # TODO: (Task 1) Implement this method

 def is\_displayed\_tree\_leaf(self) -> bool:
 """
 Return whether this tree is a leaf in the displayed-tree.

 >>> t1 = TMTree('B', [], 5)
 >>> t1.is\_displayed\_tree\_leaf()
 True
 >>> t2 = TMTree('A', [t1], 1)
 >>> t1.is\_displayed\_tree\_leaf()
 True
 >>> t2.is\_displayed\_tree\_leaf()
 False
 """
 # TODO: (Task 1) Implement this method

 # Methods for the string representation
 def get\_path\_string(self) -> str:
 """
 Return a string representing the path containing this tree
 and its ancestors, using the separator for this tree between each
 tree's name, and the suffic for this tree at the end. See the following
 doctest examples for the format.

 >>> d1 = TMTree('C1', [], 5)
 >>> d2 = TMTree('C2', [d1], 1)
 >>> d3 = TMTree('C', [d2], 1)
 >>> d3.get\_path\_string()
 'C(7) None'
 >>> d1.get\_path\_string()
 'C | C2 | C1(5) None'
 """
 # TODO: (Task 1) Implement this method
TMTree 클래스를 만듭니다: """트리맵과 호환 가능한 트리입니다. 비주얼라이저와 호환되는 트리입니다. 이것은 추상 클래스는 아니지만, 시각화하려는 특정 데이터의 필요에 맞게 필요에 맞게 하위 클래스화해야 합니다. 이 클래스에는 공개 또는 비공개 속성을 추가할 수 없습니다. 필요에 따라 비공개 메서드를 자유롭게 추가할 수 있습니다. === 공용 속성 === rect: 트리맵에서 이 노드를 나타내는 파이게임 사각형입니다. 시각화. 파이게임 사각형은 다음과 같은 형식입니다: (x, y, 너비, 높이) 여기서 (x, y)는 직사각형의 왼쪽 상단 모서리입니다. 사각형입니다. 데이터\_size: 이 트리가 나타내는 데이터의 크기입니다. === 비공개 속성 === \_colour: 이 트리의 루트의 RGB 색상 값입니다. \_name: 이 트리의 루트 값입니다. \서브트리: 이 트리의 하위 트리입니다. \부모\_트리: 이 트리의 상위 트리, 즉 이 트리를 하위 트리로 포함하는 트리입니다. 이 트리를 하위 트리로 포함하는 트리, 또는 이 트리가 루트인 경우 없음입니다. \_expanded: 시각화를 위해 이 트리를 확장된 것으로 간주할지 여부입니다. 참고: 이 클래스는 빈 트리에 대한 표현을 지원하지 않습니다, 비어 있지 않은 트리를 시각화하는 데만 관심이 있기 때문입니다. === 표현 불변 === - 데이터\_size > 0 - \_name은 비어 있지 않은 문자열입니다. - 하위 트리가 비어 있지 않은 경우 데이터\_size는 데이터\_size의 크기보다 크거나 같습니다. - 색의 요소는 각각 0~255 범위(포함)에 있습니다. - 부모\_트리가 None이 아닌 경우, 자체는 \_부모\_트리.\_subtrees에 있습니다. - parent\_tree가 None이면, 이것은 트리의 루트입니다(부모가 없음). - 이 트리는 각 트리 \_subtrees에 대한 \_parent\_tree입니다. - 확장됨이 True이면, \_부모\_tree.\_확장됨이 True입니다. - 확장됨이 False이면, \_확장됨은 \*\*모든\*\* 하위 트리에 대해 False입니다. 서브 트리의 - 하위 트리가 비어 있으면 \_expanded는 False입니다. 샘플 사용법은 메서드 독스트링을 참조하십시오. """ rect: 옵션[튜플[int, int, int, int]] data\_size: int \_colour: 튜플[int, int, int] \_name: str \하위 트리: 목록[TMTree] \부모\_tree: 옵션[TMTree] \확장: 부울 def \_\_init\_\_(self, name: str, subtrees: list[TMTree], data\_size: int = 1) -> None: """임의의 색과 제공된 . 이 트리의 데이터\_size 어트리뷰트는 다음과 같이 초기화됩니다. 의 크기 합으로 초기화됩니다. 이 트리를 각 서브트리의 부모로 설정합니다. 트리에 하위 트리가 없는 경우 트리는 처음에 확장됩니다. rect 속성은 처음에 None입니다. 이 트리는 처음에 루트입니다(부모가 없음). 전제 조건: 는 비어 있지 않은 문자열입니다. >= 0 비어 있으면 > 0 안에 있는 모든 트리는 루트입니다(부모가 없음). >>> t1 = TMTree('B', [], 5) >>> t1.rect는 None True >>> t1.data\_size 5 >>> t2 = TMTree('A', [t1], 1) >>> t2.rect is None True >>> t2.data\_size 6 """ # TODO: (작업 1) 이 메서드 구현하기 def is\_displayed\_tree\_leaf(self) -> bool: """ 이 트리가 표시된 트리의 잎인지 여부를 반환합니다. >>> t1 = TMTree('B', [], 5) >>> t1.is\_displayed\_tree\_l