ciao,
scusa del ritardo ma dato che ho fatto qualcosa del genere qualche giorno fa, mi è venuto in mente che c'era un thread che chiedeva una cosa simile ed eccomi qui a risponderti 
Se non hai gia' risolto, ti posto il codice che ho usato io per farne uno 1po scarso (nel senso che potrebbe sbagliare con qualche pagina complessa) pero' per quello che mi serviva era piu' che ottimo.
Tu magari vedi di aggiustarlo 1po alla tua esigenza, cmq intanto ti posto il codice.
private void creaTreeHtml(string pFilePath)
{
treeView1.Nodes.Clear();
string zFile = File.ReadAllText(pFilePath);
Regex regx = new Regex("<[^!](.|\n)*?>");
TreeNode nod = treeView1.Nodes.Add("html");
foreach (Match ma in regx.Matches(zFile))
{
//--- controllo non sia un tag di chiusura
if (!ma.Value.StartsWith("</"))
{
nod.Nodes.Add(ma.Value);
//--- tag tipo meta o img
//--- si chiudono sulla stessa dichiarazione
if (!ma.Value.Contains("/>"))
nod = nod.LastNode;
}
else
{
//--- se è un tag di chiusura torno al padre
nod = nod.Parent;
}
}
}
Dove il parametro è il path del file html, e Treeview1 è il nome della trereview della form dove mi serviva, probabilmente a te non servira'....
Come vedi si basa su regex, è ed il "segreto" per poter parsare i file di testo in maniera agile e strutturata. 
Spero non sia troppo tardi e che ti sia d'aiuto.
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo