This is the second of a two-volume basic introduction to enumerative combinatorics at a level suitable for graduate students and research mathematicians. This volume covers the composition of generating functions, trees, algebraic generating functions, D-finite generating functions, noncommutative generating functions, and symmetric functions. The chapter on symmetric functions provides the only available treatment of this subject suitable for an introductory graduate course and focusing on combinatorics, especially the Robinson-Schensted-Knuth algorithm. Also covered are connections between symmetric functions and representation theory. An appendix (written by Sergey Fomin) covers some deeper aspects of symmetric function theory, including jeu de taquin and the Littlewood-Richardson rule. As in Volume 1, the exercises play a vital role in developing the material. There are over 250 exercises, all with solutions or references to solutions, many of which concern previously unpublished results. Graduate students and research mathematicians who wish to apply combinatorics to their work will find this an authoritative reference.