A tree with integer weights (positive, negative or zero) is given. We want to design an efficient algorithm for finding a simple path with lightest weight in this tree. That is, we look for shortest paths where the length of the path is equal to sum of all edges weights.
I know that in a tree there is only one simple path between every pair of nodes. So, even if you try every pair of nodes finding the path between then, you would have an $O(n^3)$ algorithm.
A better way is to find for every node the cost to every other node in a single visit. This lowers the algorithm to $O(n^2)$.
Is there any algorithm that runs in linear time?