  In the $k$-dispersion problem, we need to select $k$ nodes of a given graph
so as to maximize the minimum distance between any two chosen nodes. This can
be seen as a generalization of the independent set problem, where the goal is
to select nodes so that the minimum distance is larger than 1. We design an
optimal $O(n)$ time algorithm for the dispersion problem on trees consisting of
$n$ nodes, thus improving the previous $O(n\log n)$ time solution from 1997.
  We also consider the weighted case, where the goal is to choose a set of
nodes of total weight at least $W$. We present an $O(n\log^2n)$ algorithm
improving the previous $O(n\log^4 n)$ solution. Our solution builds on the
search version (where we know the minimum distance $\lambda$ between the chosen
nodes) for which we present tight $\Theta(n\log n)$ upper and lower bounds.
