最好记录下,每个结点的level和父结点的index(parent.index)
这样可以唯一确定要添加的结点的位置,下面是我刚做的,拿来探讨一下
    for i:=1 to aTable.RecordCount-1 do
      begin
       iLevel:= aTable.FieldByName('Level').Asinteger;
       iParent:=aTable.fieldByname('ParentIndex').AsInteger;
       strNodename:= aTable.fieldByname('NodeName').AsString;       while (iLevel <> oldNode.Level+1) do
        begin
          if ( iLevel > oldNode.Level) then
             oldNode:=oldNode.getFirstChild
          else
             oldNode:=oldNode.Parent;
        end;
        if (iParent<>oldNode.Index) then
            oldNode:=oldNode.Parent.Item[iParent];
          aTree.Items.AddChild(oldNode,aTable.fieldbyName('NodeName').AsString);
        aTable.Next;
      end;oldNode是要添加的结点的父结点,相应的要有个数据表,其中字段有level,parentindex,nodename