The best way would probably to have it as part of the tree mesh itself ideally.
If you have a tree mesh without leaves and you want to dynamically add them, then I'd say it varies. If you have all the foliage as a single mesh, then using a MeshInstance to add the leaves to each tree is probably fine, but if the foliage is on the per-leaf/group-of-leaves, then you will probably want to look into using a MultiMesh or a Particle system so you can have many leaves on each tree without poor performance. If you use a MultiMesh or Particle node, you'll want it to be a child of the MeshInstance containing the low-poly tree, so if it gets chopped down and falls the leaves will fall with the tree.