Data structure for a D3 tree

Hi Everyone
New to the world of Neo4j and am looking for some help getting my head round a cypher query.
I may have potentially have even set up the graph structure wrong in the first place, so any advice is helpful!

The end result I'm trying to end up with is something that's suitable for a d3 tree i.e.

{
  "name": "Company A",
  "children": [
    {
      "name": "Company B",
      "children": [
        {
          "name": "Company C",
          "children": [
            { "name": "Company D" }
          ],
          // Services are extra data that is displayed in a tooltip
          "services": [ 
            { "serviceName": "A Service" },
            { "serviceName": "Another Service" }
          ]
        }
      ]
    }
  ],
  "services": [
    { "serviceName": "A Service" },
    { "serviceName": "Another Service" }
  ]
}

The nodes and relationships are as follows

Company  {
  "companyId": "42dc3283-a6eb-4b70-9711-2879f79ba7cc",
  "companyName": "Company A",
}

Service {
  "serviceName": "Adobe - Adobe Experience Manager",
  "serviceId": "adobe:adobe-experience-manager"
}

(:Company)-[r:CONNECTED]->(:Company)
(:Company)-[r:USES]->(:Service)

After reading the docs to get my head round Cypher queries and some googling I have got to a point of having the below query,

MATCH (root:Company {companyId: '15c4ba8a-e0e1-4c9f-8c42-8cc1ce149bec'})-[:MONITORING]->(parent:Company)-[:MONITORING]->(child:Company)
WITH root, {s: parent, children: collect(child)} AS parent_with_children
RETURN {s: root, children: collect(parent_with_children)}

I understand that the MATCH is gettting companies that only have an outgoing [:CONNECTED] relationship, and the bit I'm really struggling with is making is so companies that do not have a outgoing [:CONNECTED] relationship are included in the children.

Additionally, how would I then make is so the services are included with each company as well?

If anyone can help, or point me in the direction of some relevant reading that would be great!