Una esempio in c# per leggere, ricorsivamente, i siti di SharePoint OnLine:
//http://www.sgart.it
//using Microsoft.SharePoint.Client;
//using Microsoft.SharePoint.Client.Utilities;

public void LoadWebs()
{
  Web web = Ctx.Web;
  Ctx.Load(web, w => w.Title, w => w.Url);
  ExecuteQuery();

  Console.WriteLine(web.Title + " | " + web.Url);

  LoadSubWebs(web);
}

private void LoadSubWebs(Web parentWeb)
{
  Ctx.Load(parentWeb, w => w.Webs, w => w.Title, w => w.Url);
  ExecuteQuery();

  foreach (Web web in parentWeb.Webs)
  {
    Console.WriteLine(web.Title + " | " + web.Url);
    LoadSubWebs(web);
  }
}

//stampo il titolo di tutti i siti ricorsivamente
LoadWebs();