типа подсказка как построить дерево

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
var data:XML =
<node label="root">
<node label="level1_1">
<node label="level1_1_1"/>
<node label="level1_1_2"/>
</node>
<node label="level1_2">
<node label="level1_2_1">
<node label="level1_2_1">
<node label="level1_2_1_1"/>
</node>
</node>
</node>
</node>;
addChild(new Node(data));
}
}
}
//////////////
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
class Node extends Sprite
{
public const GAP:Number = 10;
public var label:TextField = new TextField();
private var data:XML;
public function Node(data:XML)
{
this.data = data;
//рисует себя
label.text = data.@label;
label.autoSize = TextFieldAutoSize.LEFT;
label.border = true;
label.background = true;
label.backgroundColor = 0xEEEEEE;
addChild(label);
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
// добавляет детей
for (var i:int = 0; i < data.*.length(); i++)
{
addChild(new Node(data.*[i]));
}
}
private function addedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
y = parent.getBounds(parent).bottom + GAP;
x = parent.x + GAP;
if (parent is Node)
{
var pRect:Rectangle = Node(parent).label.getRect(this);
if (parent is Node)
{
graphics.lineStyle(0);
graphics.lineTo(pRect.left, pRect.bottom);
}
}
}
}