Custom Window with Hierarchy

I am building a custom window, and I would like to mimic Unity’s Hierarchy and add it to my window.

Here is what I have so far, what it doesn’t do that I want is to group child and parent object together just like in Unity’s editor. How can I do that?

void OnGUI() {
    EditorGUILayout.BeginHorizontal(); 
    {
        scroll = EditorGUILayout.BeginScrollView(scroll, GUILayout.Width(200), GUILayout.Height(500));
        {
            GameObject[] gameObjects = GameObject.FindObjectsOfType(typeof(GameObject)) as GameObject[];
            foreach (GameObject go in gameObjects) {
                EditorGUILayout.Foldout(false, go.name);
            }
        }
        EditorGUILayout.EndScrollView();
    }
    EditorGUILayout.EndHorizontal();
}

I’m not the best of programmers, but my initial thought are something like this:

You can get all the children of a gameObject by iterating over Transforms in it’s transform.
e.g.

foreach (Transform t in go.transform) {
    //this will give you the transforms of all immidiate children of 'go'
}

using this you could probably do a really big loop upon drawing your GUI, going through all the objects one by one and sorting them to their parent.

if you locate the top level gameObjects in the hierarchy you could probably do some smart iteration over just the top level objects and then recusively draw all thier children one by one.