DFS traversal on CallGraph

I want to do the DFS traversal on the call graph starting from the main method or the root node present in the CallGraph.
I have written the following module pass.
I am constructing the call graph for the module. And then dumping it onto the console, it shows the correct Call graph onto the console. It gives me the root of the call graph. And all the called functions from the root are the nodes in the next level. And so on.
But now I want to traverse it. There is no way to get the root of the CallGraph because it is the private member.
In the following code, I am first obtaining the node corresponding to the ‘main’ method by 3rd and 4th line of code. But then I am unable to traverse further. There is nothing to obtain the nodes which are the successor of the node corresponding to main method.

bool runOnModule(Module &M) override
{

CallGraph cg = CallGraph(M); //generate the call graph of the module M
cg.dump(); //print the call graph on the console
Function *f = M.getFunction(“main”);
CallGraphNode &cgn = *cg.operator;
for(CallGraphNode::iterator itr = cgn->begin(); itr!= cgn->end();++itr)
{

//the following 2 statements always gives the segmentation fault
const Value * V = itr->first;
CallGraphNode* calleeNode = itr->second;

//how to traverse further???

}

}