Bueno, creo que lo conseguí, pero no sé es la mejor forma, pero ahí va:
Código Delphi
[-]Var
I,CampoCount:Integer;
Nodo:Packed Array[0..99] of TTreenode;
NodoValor:Packed array[0..99] of Variant;
begin
TreeView1.Items.Clear;
ZDptos.First;
CampoCount:=ZDptos.FieldCount;
While not ZDptos.Eof do
begin
if NodoValor[0]<> ZDptos.Fields[0].Value then
Nodo[0]:=TreeView1.Items.Add(nil,Vartostr(ZDptos.Fields[0].Value));
for I:=1 to ZDptos.FieldCount-1 do
begin
if NodoValor[i]<> ZDptos.Fields[i].Value then
Nodo[i]:=TreeView1.Items.AddChild(Nodo[I-1],Vartostr(ZDptos.Fields[i].Value));
Nodo[i].Data := pointer(ZDptos.FieldByName('ID').AsInteger);
if Nodo[i].Level = 2 then
begin
Nodo[i].Delete;
end;
NodoValor[i]:=ZDptos.Fields[i].Value;
end;
NodoValor[0]:=ZDptos.Fields[0].Value;
ZDptos.next;
end;
lo que hace que borra el tercer nivel del arbol que era ID, de todos modos que alguien me de su comentario, se lo agradecería mucho

.
Saludos.