Med foreldre referanser
Hvis du setter opp hver node, slik at den har en referanse til sin overordnede, kan du bare finne den dypeste node og deretter gå tilbake opp derfra til roten av treet ved å spore gjennom foreldrene. Det er definitivt den enkleste ting å gjøre på bekostning av å ha en ekstra parentNodereferanse variabel i hver node.
# Iterate through parents to trace the path in reverse.
node = deepestNode(tree)
while node.parent != None:
node = node.parent
Uten foreldre referanser
Hvis du ikke har foreldre referanser, så kan du holde oversikt over banen fra roten av treet til "dagens" node som du recurse gjennom treet. Hver gang du bunnen ut, lagre den veien som "lengste banen så langt" hvis banen er lengre enn den forrige "lengste banen så langt". Effektivt som betyr å gjøre samtalen stabelen eksplisitt.
Her er noen Python-ish kode:
# 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)