We develop traffic grooming algorithms for unidirectional SONET/WDM ring networks. The objective is to assign calls to wavelengths in a way that minimizes the total cost of electronic equipment [e.g., the number of SONET add/drop multiplexers (ADM's)]. We show that the general traffic grooming problem is NP-complete. However, for some special cases we obtain algorithms that result in a significant reduction in the number of ADM's. When the traffic from all nodes is destined to a single node, and all traffic rates are the same, we obtain a solution that minimizes the number of ADM's. In the more general case of all-to-all uniform frame we obtain a lower bound on the number of ADM's required, and provide a heuristic algorithm that performs closely to that bound. To account for more realistic traffic scenarios, we also consider distance dependent traffic, where the traffic load between two nodes is inversely proportional to the distance between them, and again provide a nearly optimal heuristic algorithm that results in substantial ADM savings. Finally, we consider the use of a hub node, where traffic can be switched between different wavelength, and obtain an optimal algorithm which minimizes the number of ADM's by efficiently multiplexing and switching the traffic at the hub. Moreover, we show that any solution not using a hub can be transformed into a solution with a hub using fewer or the same number of ADM's.