def METHOD_NAME(self):
    undirected_graph = self.to_undirected()
    num_nodes = undirected_graph.number_of_nodes()
    # Find bfs tree of the connected components
    bfs_tree = nx.bfs_tree(undirected_graph, ROOT_NODE_ID)
    # Position the nodes in a circular fashion according to the bfs tree
    pos = GraphPositioning.hierarchy_pos(bfs_tree, root=ROOT_NODE_ID, width=2 * math.pi, xcenter=0.5)
    graph_nodes = []
    graph_edges = []
    index_mapper = {}
    node_id = ROOT_NODE_ID
    max_x = max_y = 0.0001  # as close to zero
    for _id, (theta, r) in pos.items():
        index_mapper[_id] = node_id
        node = undirected_graph.nodes()[_id]
        node['id'] = node_id
        node_id += 1
        # convert from polar coordinates to cartesian coordinates
        x = r * math.sin(theta) * num_nodes
        y = r * math.cos(theta) * num_nodes
        node['pos'] = [x, y]
        graph_nodes.append(node)
        # max values to be used for normalization
        max_x = max(abs(x), max_x)
        max_y = max(abs(y), max_y)
    # Normalize the positions
    for node in graph_nodes:
        node['pos'][0] /= max_x
        node['pos'][1] /= max_y
    for edge in undirected_graph.edges():
        graph_edges.append((index_mapper[edge[0]], index_mapper[edge[1]]))
    return {'node': graph_nodes, 'edge': graph_edges}