The Steiner tree problem is a classical NP-hard optimization problem with a wide range of practical applications. In an instance of this problem, we are given an undirected graph G = (V,E), a set of terminals R ⊆ V, and non-negative costs ce for all edges e ∈ E. Any tree that contains all terminals is called a Steiner tree; the goal is to find a minimum-cost Steiner tree. The vertices V\R are called Steiner vertices. The best approximation algorithm known for the Steiner tree problem is a greedy algorithm due to Robins and Zelikovsky (SIAM J. Discrete Math, 2005); it achieves a performance guarantee of 1 + ln3