You probably don't need to worry about the edge concept explicitly, in scene graphs.
Any time that a parent object in the scene graph holds a reference to one or more children, that reference (pointer) is itself the connection that would be termed an "edge". It it is likely that the child also holds a reference back to the parent. These are just pointers. Being a trivial connection, we need no additional information in the connection other than the target it points to. So a pointer alone suffices.
This is very different from graph applications such as often used in planning utilities networks, which seek the most cost-effective paths across a graph; see MSTs for more. These sorts of graphs require explicit edge information... in this case, edge weights representing (monetary) cost. Nodes are usually explicit in code, as represented by a class or struct (a block of memory). Edges OTOH are usually implicit for the reason described above.
Be aware that with explicit nodes and implicit edges, a path across a graph might be node->node->node
; this is compact. When both nodes and edges are explicit, the same path would be node->edge->node->edge->node
. This latter form increases the number of memory jumps (the arrows) to get from first to last node, increasing the chance of a cache miss. So unless you explicitly need edges, just reference one node from another, keeping memory access tight.