Unknowns are a major problem when data mining. In this situation Trait 8 is used to identify the species in the last couplet. However every thing in red also has trait 8 but it was not included in this branch of the key because it is so prevalent.

DynamicModule[{tree,highlightFnc},
highlightFnc[t_,node_]:=Union@Flatten[Select[#,((#≥node)∨StringQ[#])&]&/@(Select[FixedPointList[#/.(Reverse/@t[[All,1]])&,#]&/@Cases[t[[All,1]][[All,2]],_String],
MemberQ[#,node]&
])];
tree={
{1->2,"Trait 1"},{1->3,"Trait 2"},{3->"Sp.5","Trait 3"},{3->5,"Trait 4"},{2->6,"Trait 5"},{2->7,"Trait 6"},{5->"Sp.6","Trait 7"},{5->"Sp.7","Trait 8"},
{6->"Sp.3","Trait 9"},{6->"Sp.4","Trait 10"},{7->"Sp.2","Trait 11"},{7->"Sp.1","Trait 12"}
};
Column@{TreePlot[tree,Top,1,EdgeRenderingFunction->(
{Thick,Which[
MemberQ[highlightFnc[tree,2],#2[[1]]],Red,
(#3==="Trait 8"),Blue,
True,Black
],
Arrow[#1],
Text[Style[#3,Black,16],(First[#1]+Last[#1])/2]
}
&)],
Style["Trait 8 is used to indeitify species",Blue,24],
Style["Trait 8 is present in all species but is not used in the key",Red,24]
}
]