I don't know if this is an L-system or something else (like the Koch snowflake) but here's how to create some 3D trees by recursively replacing seed data, much like in a L-system:
1. First you have a triangle, let's say this is a "root" triangle
2. Subdivide into 4 triangles (i.e. add midpoints to each edge and connect them)
3. Adjust the midpoints upwards
4. The new center triangle should now be called the "trunk" triangle. The other triangles still are root triangles but mark them finished, i.e. they won't be subdivided
5. Extrude the trunk triangle along the normal. The sides should be "bark". Also, add random variation to the new triangles
6. Repeat step 5, generally each iteration will make the tree taller
7. Now that the tree is tall enough (i.e. some trees have the branches much closer to ground), that topmost trunk triangle should be divided to any number of triangles called "branch". Make sure the branch normals point outwards from the trunk so the branches go more to the sides.
8. Do the same as in step 5. Also, make sure the newly generated branch triangles get smaller in each iteration
9. Repeat the branching as much as you see fit
10. The final phase should be something like midpoint subdivision, which makes the triangular trunk more circular. You can also add some randomness since nature is not so symmetrical. Some trees like pines should probably have less polys along the branch.
Now you have a 3D tree (without leaves), and a lot of triangles. The triangle types tell you what texture to use. Leaves can be created by making the branches create new polys along the edges (so the branches have fins like a rocket) and applying some nice transparent texture that has small branches and leaves drawn in.
As an L-system, you could think this something like (B = bark, T = trunk, R = root, Br = branch):
R -> R T R -> R B T B R -> R B B T B B R -> R B B Br Br B B R -> R B B B Br B B Br B B B R etc.