extractSubtree method
Создает новый граф, используя указанный узел как корень.
Если 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;
}