You wouldn't be able to do this using ArcMap built-in tools. However, this can be easily done using arcpy and Python scripting techniques. We are essentially interested in updating the layer labels for the symbology (unique values type).
- Create a layer in the map document.
This is how attribute table would look like:

- Choose Symbology > Unique values. Your tree species will be sorted alphabetically.

- Run this snippet code in your Python window in ArcMap.
Code when both tree type and percentage are stored in multiple fields:
import arcpy.mapping as mp
mxd = mp.MapDocument('current')
lyr = mp.ListLayers(mxd, 'TreeTypes')[0]
symb = lyr.symbology
symb.classLabels
print(symb.classLabels)
#[u'Apple', u'Birch', u'Cedar', u'Maple', u'Oak', u'Pear', u'Poplar', u'Willow']
lookup = {f[0]: int(f[1]) for f in arcpy.da.SearchCursor(lyr,["TreeType","Percentage"])}
print(lookup)
#{u'Apple': 20, u'Willow': 75, u'Pear': 30, u'Oak': 100, u'Poplar': 40, u'Birch': 50, u'Cedar': 10, u'Maple': 80}
symb.classLabels = sorted(symb.classLabels, key=lookup.get, reverse=True)
symb.classLabels = [i + ' - ' + str(lookup[i]) + '%' for i in symb.classLabels]
arcpy.RefreshTOC()
- Your layer symbology will be updated. You can create a new legend now which will use the labels you want. Should you already have a legend created, you can run
arcpy.RefreshActiveView() in Python window to refresh it.

Note: the code above assumes that you have your percentage values stored in a field named Percentage. Should you keep both the tree type and percentage in a single field (not the best alternative in terms of data management), then you should run this code instead:
Code when both tree type and percentage are stored in a single field:
import arcpy.mapping as mp
mxd = mp.MapDocument('current')
lyr = mp.ListLayers(mxd, 'TreeTypes')[0]
symb = lyr.symbology
symb.classLabels
print(symb.classLabels)
#[u'Apple - 20%', u'Birch - 50%', u'Cedar - 10%', u'Maple - 80%', u'Oak - 100%', u'Pear - 30%', u'Poplar - 40%', u'Willow - 75%']
symb.classLabels = sorted(symb.classLabels, key=lambda x: int(x.split(' - ')[1].split('%')[0]), reverse=True)
arcpy.RefreshTOC()