У меня было реализовано так (скорее всего, криво - но работает):

Код:
<mx:Tree x="518" y="16" height="486" width="160" id="treeDevices" showRoot="true" labelField="@label" dataProvider="{treeData}" change="treeChanged(event)"></mx:Tree>
...
[Embed(source="img/icon_1.png")]
[Bindable]
public var icon1:Class;
[Embed(source="img/icon_2.png")]
[Bindable]
public var icon2:Class;
[Embed(source="img/icon_3.png")]
[Bindable]
public var icon3:Class;
[Embed(source="img/icon_animated.swf")]
[Bindable]
public var icon4:Class;
[Bindable]
public var treeData:XMLList;
...
// Рекурсивный обход дерева
private function setIconsForXML(xml:XML,n:int):int {
treeDevices.setItemIcon(xml, icon1, icon2);
for each(var device:XML in xml.item) {
++n;
if (device.hasComplexContent()) {
n=setIconsForXML(device,n);
} else {
treeDevices.setItemIcon(device, icon3, null);
}
}
return n;
}
...
// Считали treeData из XML-файла
treeData = XMLList(event.target.data);
// Раскрашиваем ветки одними иконками, листья - другими
setIconsForXML(XML(treeData),0);
"Скорее всего криво" - потому, что пока не чувствую внутренней логики флекса (она, естественно есть, но я ей пока не прониклась).