In the self-stabilizing algorithmic paradigm for distributed computation each node has only a local view of the system, yet the goal is for the system to converge to a global state satisfying some desired property in a finite amount of time. Typically, when the underlying system is an arbitrary graph, finding an optimal solution for the desired property is not possible in a provably finite amount of time. This talk describes two new self-stabilizing algorithms that optimize their criteria for tree graphs in a finite (polynomial) amount of time. The first finds a maximum matching in a tree. (Previous self-stabilizing algorithms for constructing maximal, but not necessarily maximum, matchings in a graph exist.) The second new self-stabilizing algorithm finds a minimum sized total vertex cover of a tree.