Met ouder referenties
Als u het opzetten van elk knooppunt zodat het een verwijzing naar haar moedermaatschappij, kun je gewoon op zoek naar de diepste knooppunt en dan terug lopen vanaf daar naar de wortel van de boom door het traceren via de ouders. Dat is zeker het makkelijkste om te doen ten koste van het hebben van een extra parentNodeverwijzing variabele in elk knooppunt.
# Iterate through parents to trace the path in reverse.
node = deepestNode(tree)
while node.parent != None:
node = node.parent
Zonder ouder referenties
Als u niet ouder referenties hebben, dan kunt u bijhouden van de weg te houden van de wortel van de boom naar de "huidige" Node als je recurse door de boom. Elke keer dat je bottom-out, behalve dat pad als de "langste pad tot nu toe" als het pad langer is dan uw vorige "langste pad tot nu toe". Effectief betekent dit dat het maken van uw call stack expliciet.
Hier zijn een paar Python-achtig code:
# 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)