No es mi fuerte el C++. Pero con una estructura similar a esta de delphi debe de funcionarte
Código Delphi
[-]var
nodo1, nodo2, nodo3:TTreeNode;
begin
Query.First;
while not Query.eof do begin
nodo1 := LisMun.Items.AddChild(Nil, Query.fieldByName('a').AsString);
repeat
nodo2 := LisMun.Items.AddChild(nodo1, Query.fieldByName('b').AsString);
repeat
nodo3 := LisMun.Items.AddChild(nodo2, Query.fieldByName('c').AsString);
Query.Next;
until Query.eof or (nodo2.Text <> Query.fieldByName('b').AsString);
until Query.eof or (nodo1.Text <> Query.fieldByName('a').AsString);
end;
end;