Ran G. ให้คำแนะนำเกี่ยวกับอัลกอริทึมที่มีประสิทธิภาพแม้ว่าบางทีเขาอาจจะทิ้งรายละเอียดไว้บ้าง การคำนวณเส้นทางรูตทั้งหมดจะไม่มีประสิทธิภาพเล็กน้อยหากคุณทำงานซ้ำแล้วซ้ำอีกตัวอย่างเช่นหากคุณคำนวณแต่ละเส้นทางแล้วคำนวณความยาว
ดำเนินการขั้นตอนวิธีแบบเรียกซ้ำต่อไปนี้เริ่มต้นด้วยLongestPath(root)จะให้สิ่งที่คุณต้องการ โดยพื้นฐานแล้วมันจะคำนวณเส้นทางที่ยาวที่สุดสำหรับแต่ละทรีย่อย ที่แต่ละโหนดต้องสร้างเส้นทางใหม่และคืนค่าที่ยาวที่สุด
 LongestPath(node)
   If node is a leaf, return (node,0) 
   If node is not a leaf:  
    For each edge (node,length,next):
       Let (p,l) = LongestPath(next)
       Let (path,len) = (p++[next], l + length)
    Return element (path,len) from previous step with largest value len
นี่คือการรวมกันหากรหัสหลอกด้วยสัญกรณ์ Haskell บางอย่างดังนั้นฉันหวังว่ามันจะเข้าใจได้