code: function _updateNodes(nodes, source) {
    // Enter any new nodes at the parent's previous position.
    nodes.enter().append('g')
      .attr('transform', function(d) {
        var node = _getVertexNode(d, "x0") || source;
        node = _layout.projector(node.x0, node.y0);
        return 'translate(' + node.x + ',' + node.y + ')';
      })
      .on({
        mouseover: _onMouseOver,
        mouseout: _tip.hide,
        mousedown: _onMouse,
        mousemove: _onMouse,
        dblclick: _onDblclick
      })
      .style('opacity', 1e-6)
      .each(_addContent);
  
    // Transition nodes to their new position.
    nodes.transition()
      .duration(DURATION)
      .attr('transform', function(d) {
        d = _layout.projector(d.x, d.y);
        return 'translate(' + d.x + ',' + d.y + ')';
      })
      .style('opacity', 1);
  
    // Transition exiting nodes to the parent's new position.
    nodes.exit().transition()
      .duration(DURATION)
      .attr('transform', function(d) {
        var node = _getVertexNode(d, "x") || source;
        node = _layout.projector(node.x, node.y);
        return 'translate(' + node.x + ',' + node.y + ')';
      })
      .style('opacity', 1e-6)
      .remove();
  }
docs: Update position of all nodes in the list and preform required transitions.
  @param nodes {Array} Nodes to be updated
  @param source {d3 element} Node that trigged the update, in first update source will be root.