Remover todos os nós vazios / desnecessários do HTML

Qual seria a maneira preferida de remover todos os nós vazios e desnecessários? Por exemplo

<p></p> deve ser removido e<font><p><span><br></span></p></font> também deve ser removido (portanto, a tag br é considerada desnecessária neste caso)

Terei que usar algum tipo de função recursiva para isso? Eu estou pensando em algo ao longo das linhas deste talvez:

 RemoveEmptyNodes(HtmlNode containerNode)
 {
     var nodes = containerNode.DescendantsAndSelf().ToList();

      if (nodes != null)
      {
          foreach (HtmlNode node in nodes)
          {
              if (node.InnerText == null || node.InnerText == "")
              {
                   RemoveEmptyNodes(node.ParentNode);
                   node.Remove();
               }
           }
       }
  }

Mas isso obviamente não funciona (exceção do stackoverflow).

questionAnswers(1)

yourAnswerToTheQuestion