Pavel 'LEdoian' Turinsky
5 years ago
2 changed files with 63 additions and 9 deletions
@ -0,0 +1,61 @@ |
|||
# NOTE: node.prev a node.succ jsou implementovány přímo v models.TreeNode |
|||
|
|||
# Slouží k debugování pro rychlé získání představy o podobě podstromu pod tímto TreeNode. |
|||
def print_tree(node,indent=0): |
|||
# FIXME: Tady se spoléháme na to, že nedeklarovaný primární klíč se jmenuje by default 'id', což není úplně správně |
|||
print("{}{} (id: {})".format(" "*indent,node, node.id)) |
|||
if node.first_child: |
|||
node.first_child.print_tree(indent=indent+2) |
|||
if node.succ: |
|||
node.succ.print_tree(indent=indent) |
|||
|
|||
## Rodinné vztahy |
|||
def get_parent(node): |
|||
# Nejdřív získáme prvního potomka... |
|||
|
|||
# ... a z prvního potomka umíme najít rodiče |
|||
|
|||
# Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé) |
|||
def general_next(node) |
|||
def general_prev(node) |
|||
|
|||
# Generátor potomků |
|||
# TODO: copy-pasta |
|||
|
|||
# Generátor bratrů |
|||
|
|||
# Generátor následníků v "the-right-order" |
|||
|
|||
## Filtrační hledání |
|||
# Najdi dalšího bratra nějakého typu, nebo None. |
|||
# hledá i podtřídy, i.e. get_next_brother_of_type(neco, TreeNode) je prostě succ. |
|||
def get_next_brother_of_type(current, type): |
|||
def get_prev_brother_of_type(current, type): |
|||
|
|||
# Totéž pro "the-right-order" pořadí |
|||
def get_next_node_of_type(current, type): |
|||
def get_next_node_of_type(current, type): |
|||
|
|||
|
|||
|
|||
|
|||
# Editace stromu: |
|||
def create_node_after(predecessor, type, **kwargs): |
|||
|
|||
# Vyrábí prvního syna, ostatní nalepí za (existují-li) |
|||
def create_child(parent, type, **kwargs): |
|||
|
|||
def create_node_before(...): |
|||
# Tohle bude hell. |
|||
|
|||
# ValueError, pokud je (aspoň) jeden parametr None |
|||
def swap(node, other): |
|||
|
|||
def swap_pred |
|||
def swap_succ |
|||
|
|||
# Rotace stromu |
|||
# Dokumentace viz wiki: |
|||
# (lower bude jednoduchá rotace, ne mega, existence jednoduché rotace mi došla až po nakreslení obrázku) |
|||
def raise(node) |
|||
def lower(node) |
Loading…
Reference in new issue