Regarding loading, the package you need is called schema, and the function for loading objects recursively is called schema.LoadTo.
There are few examples in tests and an example of a full program.
So it should be pretty straightforward to modify example app and replace type definition with any tree-like structure to get fist results. Please keep in mind that it does not support loops in graph.
Regarding nodes comparison, you can use a low-level function called QuadIterator which is available on QuadStore object (the database). It works like this: you can specify a "direction" of a quad (subject or object, for example) and a value on this direction to filter. In your case it will be something like this:
it := qs.QuadIterator(quad.Subject, qs.ValueOf("<your-node-id>"))
It will iterate over all predicate-object pairs that start on a given node. It's similar to how
Out works, but it returns full quads instead of object nodes.
Having these iterators for two objects you can compare if their predicates have same objects or not. Iterators are sorted, thus you can advance them one by one and compare values without loading everything into memory.