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