Με μητρική αναφορές
Αν έχετε δημιουργήσει σε κάθε κόμβο, έτσι ώστε να έχει μια αναφορά προς τη μητρική της, μπορείτε να βρείτε ακριβώς το βαθύτερο κόμβο και στη συνέχεια με τα πόδια πίσω από εκεί στη ρίζα του δέντρου από τον εντοπισμό μέσω των γονέων. Αυτό είναι σίγουρα το πιο εύκολο πράγμα να κάνει σε βάρος του έχει ένα επιπλέον parentNodeμεταβλητή αναφοράς σε κάθε κόμβο.
# Iterate through parents to trace the path in reverse.
node = deepestNode(tree)
while node.parent != None:
node = node.parent
Χωρίς γονέα αναφορές
Αν δεν έχετε μητρική αναφορές, τότε μπορείτε να παρακολουθείτε την πορεία από τη ρίζα του δέντρου με την «τρέχουσα» κόμβο καθώς recurse μέσα από το δέντρο. Κάθε φορά που κάτω από, εκτός από αυτό το μονοπάτι ως το «μεγαλύτερο πορεία μέχρι τώρα», εάν η διαδρομή είναι μεγαλύτερη από ό, τι τα προηγούμενα σας «μακρύτερη διαδρομή μέχρι σήμερα». Ουσιαστικά αυτό σημαίνει ότι κάνει στοίβα κλήσεων σας ρητή.
Εδώ είναι μερικά κώδικα Python-ish:
# Public function. Sets up globals and then calls helper.
def deepestPath(tree):
global longestPath, currentPath
# Reset for a new search.
longestPath = []
currentPath = []
_deepestPath(tree.root)
return longestPath
# Helper function that does the real work.
def _deepestPath(node):
global longestPath, currentPath
currentPath.append(node)
# No children, we've bottomed out.
if not node.left and not node.right:
if currentPath.length > longestPath.length:
# Save a copy of the current path.
longestPath = list(currentPath)
# Recurse into children.
else:
if node.left: _deepestPath(node.left)
if node.right: _deepestPath(node.right)
currentPath.pop(node)