Let’s view an algorithm that manage to find the minimum and the maximum root-leaf path in a binary search tree. I used three stacks in this algorithm, one is temporary and the other will be filled with the results. Note that if we change:
- i > maxSeq.size() with i >= maxSeq.size() we get the longest root-leaf path from the right instead of from the left
- i < minSeq.size() with i <= minSeq.size() we get the shortest root-leaf path from the left instead of from the right
/**
* Find the longest root-leaf path
*
* @param t A BST tree
* @param depth Initially set to 0
* @param tempSeq Empty stack
* @param minSeq Empty stack
* @param maxSeq Empty stack
*/
public void maxMinPath(BSTNode t, int depth, Stack tempSeq, Stack minSeq, Stack maxSeq){
tempSeq.push(t);
if(t.hasLeft()) maxMinPath(t.left(), depth + 1, tempSeq, minSeq, maxSeq);
if(t.hasRight()) maxMinPath(t.right(), depth + 1, tempSeq, minSeq, maxSeq);
if(t.isLeaf()){
if(i > maxSeq.size()) maxSeq = tempSeq.clone();
if(minSeq.size() == 0 || i <= minSeq.size()) minSeq = tempSeq.clone();
}
tempSeq.pop();
}