Предполагая, что у вас есть только один уровень потомка для каждого родителя, вы можете создать метод Extension следующим образом.
public static class Extensions
{
internal static IEnumerable<KeyValuePair<string,IEnumerable<string>>> GetSelectedList(this TreeNodeCollection tr)
{
var childCollection = new List<string>();
foreach (var trNode in tr.OfType<TreeNode>())
{
if (!trNode.Checked) continue;
childCollection.Clear();
childCollection.AddRange(trNode.Nodes.OfType<TreeNode>().Where(x => x.Checked).Select(x=>x.Text));
yield return new KeyValuePair<string, IEnumerable<string>>(trNode.Text, childCollection);
}
}
}
Теперь вы можете использовать его следующим образом.
var selectedData = treeview.Nodes.GetSelectedList().ToDictionary(x => x.Key, y => y.Value);