Given a tree T = (V, E) of n nodes such that each node v is associated with a value-weight pair (val(v), w(v)), where value val(v) is a real number and weight w(v) is a non-negative integer, the density of T is defined as Sigma(v is an element of V) val(v)/Sigma(v is an element of V) w(v). A subtree of T is a connected subgraph (V', E') of T, where V' subset of V and E' subset of E. Given two integers w(min) and w(max), the weight-constrained maximum-density subtree problem on T is to find a maximum-density subtree T' = (V', E') satisfying w(min) <= Sigma(v is an element of V')w(v) <= W-max. In this paper, we first present an O(w(max)n)-time algorithm to find a weight-constrained maximum-density path in a tree T, and then present an O (w(max)(2)n)-time algorithm to find a weight-constrained maximum-density subtree in T. Finally, given a node subset S subset of V, we also present an O(w(max)(2)n)-time algorithm to find a weight-constrained maximum-density subtree in T which covers all the nodes in S.