|
@ -10,24 +10,27 @@ def print_tree(node,indent=0): |
|
|
if node.succ: |
|
|
if node.succ: |
|
|
print_tree(node.succ, indent=indent) |
|
|
print_tree(node.succ, indent=indent) |
|
|
|
|
|
|
|
|
## Rodinné vztahy |
|
|
|
|
|
def get_parent(node): |
|
|
|
|
|
pass |
|
|
|
|
|
# Nejdřív získáme prvního potomka... |
|
|
|
|
|
# Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist |
|
|
# Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist |
|
|
while True: |
|
|
def safe_pred(node): |
|
|
try: |
|
|
try: |
|
|
node = node.prev |
|
|
return node.prev |
|
|
except ObjectDoesNotExist: |
|
|
except ObjectDoesNotExist: |
|
|
# We rely here on the fact that the assignment will not happen if RHS throws an exception |
|
|
return None |
|
|
break |
|
|
|
|
|
# ... a z prvního potomka umíme najít rodiče |
|
|
# A to samé pro .father_of_first |
|
|
# Django je pořád hloupé... |
|
|
def safe_father_of_first(node): |
|
|
try: |
|
|
return node.prev |
|
|
return node.father_of_first |
|
|
|
|
|
except ObjectDoesNotExist: |
|
|
except ObjectDoesNotExist: |
|
|
return None |
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
## Rodinné vztahy |
|
|
|
|
|
def get_parent(node): |
|
|
|
|
|
# Nejdřív získáme prvního potomka... |
|
|
|
|
|
while safe_pred(node) is not None: |
|
|
|
|
|
node = safe_pred(node) |
|
|
|
|
|
# ... a z prvního potomka umíme najít rodiče |
|
|
|
|
|
return safe_father_of_first(node) |
|
|
|
|
|
|
|
|
# Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé) |
|
|
# Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé) |
|
|
def general_next(node): |
|
|
def general_next(node): |
|
|
# Máme potomka? |
|
|
# Máme potomka? |
|
|