extractSubtree method

  1. @override
IGraphEditable<T> extractSubtree(
  1. String key, {
  2. bool copy = true,
})
override

Создает новый граф, используя указанный узел как корень.

Если copy равен true, создается полная копия поддерева. Если false - создается view на существующий граф.

// Создать копию поддерева
final newGraph = graph.extractSubtree('node42', copy: true);

// Создать view на существующее поддерево
final view = graph.extractSubtree('node42', copy: false);

Implementation

@override
IGraphEditable<T> extractSubtree(String key, {bool copy = true}) {
  _assertNodeExists(Node(key));
  final newRoot = getNodeByKey(key)!;

  if (!copy) {
    // Возвращаем view на существующий граф
    return SubtreeView<T>(
      originalGraph: this,
      subtreeRoot: newRoot,
    );
  }

  // Создаем копию поддерева
  final tree = Graph<T>(root: newRoot);
  final subtree = _getSubtree(newRoot);

  for (final node in subtree) {
    if (node != newRoot) {
      tree.addNode(node);
    }

    final parent = getNodeParent(node);
    if (parent != null && subtree.contains(parent)) {
      tree.addEdge(parent, node);
    }

    final data = getNodeData(node.key);
    if (data != null) {
      tree.updateNodeData(node.key, data);
    }
  }

  return tree;
}