You are on page 1of 7


𝑇 𝑁

• 𝑇 𝑟∈𝑁 𝑟 𝑟 𝑇

• 𝑛∈𝑁 𝑣∈𝑁 𝑣
𝑣

𝑣 𝑣
𝑣 𝑣

𝑢 𝑣 𝑢=𝑣 𝑢 𝑣
𝑣 𝑢 𝑢 𝑣
𝑇 𝑣 𝑣 𝑇
𝑣

𝑇 𝑢, 𝑣 𝑢 𝑣

𝑛
𝑛−1
𝛼 𝛽 𝛾
𝑒 𝑓 𝑔

api/ controllers/
api/ models/
api/ routes/
api/ __init__.py
api/ database.py
controllers/ channel_controller.py
models/ channel.py
routes/ channel_routes.py
𝑇 𝑝0 , 𝑝1 , . . . , 𝑝𝑛 (𝑝𝑖 , 𝑝𝑖+1 ) 𝑇
𝑖 0 𝑛−1
𝑇

api/ models/ channel.py


api/ controllers/ channel_controller.py
api/ routes/ channel_routes.py
api/ __init__.py
api/ database.py

𝑇
𝑒 api/ controllers/ 𝑗 controllers/ channel_controller.py

𝑒 api/ controllers/
𝑗 controllers/ channel_controller.py
𝑒 controllers/
N

self._element
self._parent
self._children

N.element()
N.add(element, parent)

Node

class Node:

def __init__(self, element, parent=None, children=None):


self._element = element
self._parent = parent
if children is None:
self._children = []
else:
self._children = children

def element(self):
return self._element

def add(self, element):


temp = Node(element)
if temp not in self._children:
temp._parent = self
self._children.append(temp)
return temp
else:
raise ValueError("El nodo ya tiene un padre.")

def __eq__(self, other):


return type(other) is type(self) and other._element is
self._element

def __ne__(self, other):


return not (self == other)
def __str__(self):
return f"* {self.element()}"

def __repr__(self):
return f"* {self.element()}"

ADTTree

T.root() T None T
T.is_root(p) True p T
T.parent(p) p None p
T.num_children(p) p
T.children(p) p
T.is_leaf(p) True p
len(T) T
T.is_empty() True T
T.nodes() T
Node
iter(T) T
T Node
from node import Node

class ADTTree:

def __init__(self, root=None):


self._size = 0
if root is not None:
self.add_root(root)
else:
self._root = None

def add_root(self, element):


if not self.is_empty():
raise ValueError("El árbol ya tiene una raíz.")
self._root = Node(element)
self._size += 1

def __len__(self):
return self._size

def root(self):
return self._root

def is_root(self, p):


return p == self.root()

def parent(self, p):


return p._parent

def is_empty(self):
if self.root() is None:
return True
else:
return False
def num_children(self, p):
return len(p._children)

def children(self, p):


for child in p._children:
yield child

def is_leaf(self, p):


if self.num_children(p) > 0:
return False
else:
return True

def nodes(self):
pass

def __iter__(self):
pass

def __str__(self):
return self._str_recursive(self._root)

def _str_recursive(self, node, depth=0):


result = " " * depth + str(node) + "\n"
for child in node._children:
result += self._str_recursive(child, depth + 1)
return result

nodes iter

ADTTree

𝒑
𝑻

𝒑 𝒑

• 𝒑 𝒑

• 𝒑 𝒑

𝑨𝑫𝑻𝑻𝒓𝒆𝒆 𝒑 𝑻
def depth(self, p):
"""Calcula la profundidad de un nodo p para un árbol T"""
if self.is_root(p):
return 0
else:
return 1 + self.depth(self.parent(p))

𝒑 𝒑

𝒑 𝒑

𝑨𝑫𝑻𝑻𝒓𝒆𝒆 𝒑 𝑻

def height(self, p):


"""Calcula la altura de un nodo p para un árbol T"""
if self.is_leaf(p):
return 0
else:
heights = []
for child in self.children(p):
heights.append(self.height1(child))
return 1 + max(heights) # 1 + máxima altura de los hijos de p

𝒑 𝑻 height
_recursive_height

def height(self, p=None):


"""Calcula la altura de un nodo p para un árbol T"""
if p is None:
p = self.root()
return self._recursive_height(p)

height
height

You might also like